他のトリックは、私はこのようにそれを「だまし」ん何もないので:
は、クライアント側でMessageHeaderを追加します。「名前」で
using (OperationContextScope scope = new OperationContextScope(cli.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("MyHeader", Guid.NewGuid().ToString(), ""));
string ret = cli.GetData(1);
}
ヘッダーのプロパティには、私が名前を持っています私が渡したいヘッダーの名前空間を値保持者として使用しています(ヘッダーの '値'には見えないので、プロパティとして公開されません)。私はサービスインスタンスを作成するたびにクライアントサイドでこれを行います。サービスで
は、私のようなヘッダ読む:それは間違いなくハックですが、私は何かがより洗練作成に時間外だし、これは私が「チャネルID」の道を維持することができます
var head = OperationContext.Current.IncomingMessageHeaders.FirstOrDefault(h => h.Name == "MyHeader");
string channelId = head.Namespace;
をIそれを制御することができます...それは醜いソリューションだと私はそれを好きではないので、誰かがより良いものを見つけたときに私はそれを感謝...
編集:私は発信/ IncomingMessagePropertiesを使用してみましたが、それは」doesnの私はおそらく何かが欠けているでしょう...
ユースケースは何ですか、これで何を達成しようとしていますか? –
私が書いたように、チャンネルIDに基づいていくつかの履歴テーブルにログを記録しようとしています。これは、開かれていた各チャンネルでどのメソッドが呼び出されたかを追跡するものです。また、どのチャンネルが開かれているかをトラッキングする方法もあります(これはビジネスロジックの一部です)。 – veljkoz
著者がセッションモードを持っていないと誤解されていない場合、セッションコールバックやその他の情報を取得するためにOperationContext.Currentにアクセスできません。 –