我需要在我的WCF服務中識別一個通道。WCF - 如何獲得一些頻道標識符?
一種方法是使用Session.SessionID,但我似乎無法獲得與會話一起工作的綁定,並且會話對於我試圖實現的東西似乎太多了。我只是想記下一個頻道的歷史記錄 - 正在調用什麼方法,並保留當前活動的「頻道ID」的散列。
我怎樣才能得到'頻道ID'之類的東西?我知道'頻道ID'不是明確存在的,但是有什麼解決方法?
我需要在我的WCF服務中識別一個通道。WCF - 如何獲得一些頻道標識符?
一種方法是使用Session.SessionID,但我似乎無法獲得與會話一起工作的綁定,並且會話對於我試圖實現的東西似乎太多了。我只是想記下一個頻道的歷史記錄 - 正在調用什麼方法,並保留當前活動的「頻道ID」的散列。
我怎樣才能得到'頻道ID'之類的東西?我知道'頻道ID'不是明確存在的,但是有什麼解決方法?
由於閒來無事開了竅,我「騙」這樣的:
在客戶端加入的MessageHeader:
using (OperationContextScope scope = new OperationContextScope(cli.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("MyHeader", Guid.NewGuid().ToString(), ""));
string ret = cli.GetData(1);
}
在「名稱」標題的財產我有名字我想傳遞的頭文件中,我使用名稱空間作爲值的持有者(因爲我似乎無法得到頭的'值' - 它不會作爲屬性公開?!)。我每次創建服務實例時都會在客戶端執行此操作。
在服務我讀到這樣的標題:
var head = OperationContext.Current.IncomingMessageHeaders.FirstOrDefault(h => h.Name == "MyHeader");
string channelId = head.Namespace;
這絕對是一個黑客,但我沒有時間來創造的東西更優雅,這讓我保持「通道ID」的方式,我可以控制它......它是一個醜陋的解決方案,我不喜歡它,所以每當有人找到更好的東西我會感激...
編輯:我試着用呼出/ IncomingMessageProperties但沒有按」噸似乎工作 - 這是無處找到服務器端...我可能錯過了一些...
這是如何獲得標題值,而不通過命名空間攻擊它: Guid myChannelID = OperationContext.Current.IncomingMessageHeaders.GetHeader
@velijkov:我所有的聖誕節都來了。 TY。 – 2013-07-18 01:53:00
什麼是用例,你試圖用這個來達到什麼目的? – 2010-11-22 10:46:35
正如我寫的 - 我試圖在某個歷史表中登錄一個基於頻道ID的歷史表,該頻道ID可以追蹤每個頻道在打開時調用哪些方法。此外,要有一種方法來跟蹤打開哪些渠道(這是一些業務邏輯)。 – veljkoz 2010-11-22 10:50:59
如果我沒有弄錯作者有沒有SessionMode,所以他不能訪問OperationContext.Current來檢索會話回調或任何其他信息。 – 2010-11-22 10:57:40