有很多类似的调用,也许是并行的,对一些 Web 服务,我想知道实现关联 token 机制的最佳方法是什么。
这个想法是让从客户端到服务器,能够使用标识符记录单个请求的信息,该标识符有助于稍后获取特定请求的日志。
我想避免在每个操作上添加一个参数,因为我认为这是管道,而不是业务。
PS:我在我的解决方案中同时控制客户端和服务器端。我可以改变任何需要的东西。我的服务使用 .Net V4 运行,我使用 log4net 创建日志。我已经包装了 log4net 是一些实用方法,如果需要,我可以更改。
最佳答案
那么您是否只想要有关请求及其响应的信息?如果您使用带有 WS-Addressing
的消息版本您应该自动拥有它,因为每条消息都将包含其自动生成的 ID (guid),并且每个响应也将包含请求的 ID。您可以通过 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,您必须使用带有
WsHttpBinding
的 SOAP 服务。或 CustomBinding
使用正确 MessageVersion
在 TextMessageEncodingBindingElement
.如果您想关联来自同一客户端的所有请求,您需要 WCF session 并使用 session ID (
OperationContext.Current.SessionId
)。
关于wcf - 将相关 token 传递给 WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552878/