我正在使用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实例关联但我不需要复杂的东西(例如,在不同的方法调用中是唯一的)。
如果有人可以提供帮助,请大家帮忙。提前谢谢。
答案 0 :(得分:0)
普通SOAP或REST在消息中没有包含此类标识。您必须使用一些支持消息标识的附加功能或传输协议(例如MSMQ)。如果是MessageId
,则必须将SOAP服务与WS-Addressing一起使用,并且必须从客户端传递此信息。