有許多類似的調用,也許並行,對一些Web服務,我想知道什麼是實現相關令牌機制的最佳方式。將相關令牌傳遞給WCF服務?
這個想法是從客戶端到服務器,有一個標識符記錄信息的能力,這個標識符有助於稍後獲取特定請求的日誌。
我想避免在每個操作中添加一個參數,因爲我認爲這是管道,而不是業務。 PS:我在我的解決方案中控制客戶端和服務器端。我可以改變任何需要的東西。我的服務使用.Net V4運行,我使用log4net創建日誌。我已經包裝log4net是一些實用的方法,我可以根據需要進行更改。
有許多類似的調用,也許並行,對一些Web服務,我想知道什麼是實現相關令牌機制的最佳方式。將相關令牌傳遞給WCF服務?
這個想法是從客戶端到服務器,有一個標識符記錄信息的能力,這個標識符有助於稍後獲取特定請求的日誌。
我想避免在每個操作中添加一個參數,因爲我認爲這是管道,而不是業務。 PS:我在我的解決方案中控制客戶端和服務器端。我可以改變任何需要的東西。我的服務使用.Net V4運行,我使用log4net創建日誌。我已經包裝log4net是一些實用的方法,我可以根據需要進行更改。
那麼你只需要關於請求和響應的信息?如果您使用消息版本WS-Addressing
,您應該自動擁有該消息,因爲每條消息都將包含其自動生成的標識(guid),並且每個響應也會包含該請求的標識。您可以通過OperationContext
訪問這些標題:
服務器端:
UniqueId id = OperationContext.Current.IncomingMessageHeaders.MessageId;
客戶端:
using (var scope = new OperationContextScope())
{
// Do call to server and after that access headers
OperationContext context = OperationContext.Current;
UniqueId responseId = context.IncomingMessageHeaders.MessageId;
UniqueId requestId = context.IncomingMessageHeaders.RelatesTo;
}
要使用的WS-Addressing,你必須使用SOAP服務WsHttpBinding
或CustomBinding
使用正確MessageVersion
與TextMessageEncodingBindingElement
。
如果您希望來自同一客戶端的所有請求具有相關性,則需要使用WCF會話並使用會話Id(OperationContext.Current.SessionId
)。
thx :)這正是我想要做的。一點封裝,我的日誌將與這個ID飼料。 –