WCF每个服务方法调用的唯一ID

时间:2011-08-19 12:18:27

标签: wcf

我正在使用log4net进行日志记录,并且我想记录每个serice方法调用唯一的id。我不需要在服务调用中使用它,只需在方法调用中。我可以在wcf中使用内置的id吗?我不想在方法调用开始时手动创建guid或其他东西。

e.g。

wcfMethod(int x)
{
 log("xxx");
 somework
 log("yyy");
}

private log(string message)
{
   var frame = new StackFrame(1);
   var method = frame.GetMethod();
   var type = method.DeclaringType;
   var name = method.Name;

   var log = LogManager.GetLogger(type);

   // LOG ID HERE
   ThreadContext.Properties["MessageId"] =    OperationContext.Current.IncomingMessageHeaders.MessageId; // SOMETHING HERE
}

我已经尝试过OperationContext.Current.IncomingMessageHeaders.MessageId,但那些总是为空。

我已经阅读了关于wcf实例关联但我不需要复杂的东西(例如,在不同的方法调用中是唯一的)。

如果有人可以提供帮助,请大家帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

普通SOAP或REST在消息中没有包含此类标识。您必须使用一些支持消息标识的附加功能或传输协议(例如MSMQ)。如果是MessageId,则必须将SOAP服务与WS-Addressing一起使用,并且必须从客户端传递此信息。