c# - WCF - 如何获得一些 channel 标识符?

标签 c# c#-4.0 channel wcf

我需要在我的 WCF 服务中标识一个 channel 。

一种方法是使用 Session.SessionID,但我似乎无法让绑定(bind)与 session 一起工作,而且 session 对于我想要实现的目标来说似乎太多了。我只是想写下 channel 的历史记录 - 正在调用哪些方法,并保留当前事件的“ channel ID”的哈希值。

如何获得“ channel ID”之类的信息?我知道“ channel ID”并不明确存在,但解决方法是什么?

最佳答案

因为没有其他方法可以解决问题,所以我这样“欺骗”它:

在客户端添加MessageHeader:

using (OperationContextScope scope = new OperationContextScope(cli.InnerChannel))
{
   OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("MyHeader", Guid.NewGuid().ToString(), ""));

   string ret = cli.GetData(1);
}

在 header 的“名称”属性中,我有要传递的 header 的名称,并且我使用命名空间作为值持有者(因为我似乎无法获得该“值” header 的 - 它没有作为属性公开?!)。每次创建服务实例时,我都会在客户端执行此操作。

在服务中,我阅读标题如下:

var head = OperationContext.Current.IncomingMessageHeaders.FirstOrDefault(h => h.Name == "MyHeader");
string channelId = head.Namespace;

这绝对是一个黑客,但我没有时间创造更优雅的东西,这让我能够以我可以控制的方式维护“ channel ID”……这是一个丑陋的解决方案,我不喜欢它,所以每当有人发现更好的东西时,我都会很感激......

编辑:我尝试使用 Outgoing/IncomingMessageProperties,但这似乎不起作用 - 在服务器端找不到它......我可能遗漏了一些东西......

关于c# - WCF - 如何获得一些 channel 标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4244481/

相关文章:

c#-4.0 - .Net 4 相当于 Java 的 Thread Dump

go - channel 关闭时收到的 bool 标志与Golang中的预期不符

java - 是否有必要关闭一个 Netty ChunkedInput?

c# - 如何从整数列表中计算排名?

c# - .NET 线程 - 同步对象

c#-4.0 - HttpListener 访问被拒绝

Java 和 FTP 服务器

c# - 从 Entity Framework 中的导航属性中删除所有记录

c# - 使用 c# 的输出作为 MATLAB 的输入

architecture - 工作流基础设计问题/注意事项?