有没有办法将传入请求记录到 WCF 服务?
我有一个作为 Windows 服务托管的简单 WCF 服务。WCF 服务每天都会写入日志。有时会有不好的请求进来,我也想登录。
有没有办法记录进来的 SOAP 请求?这样有助于向客户展示他们所犯的错误。
问候。
我想添加到@RoelF 的回复,因为他在下面提到
虽然我不确定如何准确记录 SOAP 消息的内容,但这种方法可以为您提供很多额外的信息,尤其是在您实现定时记录的情况下。
因此,这是您用来从 AfterCall BeforeCall 方法中获取 SOAP 请求的行。
Message message = OperationContext.Current.RequestContext.RequestMessage;
然后你可以记录 message.ToString() 。这应该记录您之后的 SOAP 请求。
您可以尝试实现一个IServiceBehavior
和一个IParameterInspector
类,它将处理日志记录。
IServiceBehavior是最重要的实现方法
:ApplyDispatchBehavior
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)
{
foreach (var endpoint in dispatcher.Endpoints)
{
foreach (var dispatchOperation in endpoint.DispatchRuntime.Operations)
{
dispatchOperation.ParameterInspectors.Add(new LoggingParameterInspector(/*reference to your logger*/));
}
}
}
}
您必须将其应用ServiceBehavior
到您的服务中,方法是使其成为Attribute
您的服务实现类,或者在启动时将其添加到定义中。
IParameterInspector
这个接口有两个方法:BeforeCall
和AfterCall
。在这些方法的实现中,您可以访问操作名称和为方法提供的输入。这允许您创建对服务的所有调用的干净和简单的跟踪。
虽然我不确定如何准确记录 SOAP 消息的内容,但这种方法可以为您提供很多额外的信息,尤其是在您实现定时记录的情况下。
您可以在服务的配置文件中配置跟踪和跟踪级别。为了查看日志文件,Microsoft 提供了一个特殊的跟踪日志查看器。通常,您只需双击跟踪文件即可在此查看器中打开它们。
这在SO上已经回答了很多次,例如How to turn on WCF tracking?
MSDN 上的文档 http://msdn.microsoft.com/en-us/library/ms733025.aspx
示例配置
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true" >
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="myUserTraceSource"
switchValue="Information, ActivityTracing">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Error.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>