.Net Web服务记录

时间:2020-03-06 14:48:25  来源:igfitidea点击:

我登录Web服务的理想情况是记录所有方法调用(身份验证和数据访问)以及传递给它们的参数以及可能发生的错误,并将它们与关联的单个ID关联他们打同样的电话。另外,理想情况下,我希望能够控制是否记录所有参数,或者仅记录方法调用。我希望能够控制是否记录所有登录名或者仅记录失败的登录名。同样,在单个请求中检索到的所有信息都将通过ID(引导或者其他方式)链接在一起。

这是我理想的伐木情况。如果有人知道如何实现所有这些,并愿意搬到新罕布什尔州曼彻斯特地区...;)

但是说真的,有人知道我将如何将收到的Web服务请求与错误或者方法调用绑定在一起吗?我最初的尝试包括在Soap Extension中搞乱,尝试添加标头(soap或者html),以及不将扩展中的任意值传递给服务本身的内容。我所有的尝试都没有成功。

当前的日志记录情况是将身份验证日志记录到一个表,将方法/业务调用记录到另一个表,将异常记录到另一个表,并且它们之间没有互连。时间戳有时会很有帮助,但不够可靠,无法有效调试。我们目前使用的是.Net 2.0,到今年年底可能会使用3.5,因此,如果保留对2.0功能的答复,将会更有帮助。

任何人有任何想法吗?

解决方案

如果可能,请使用wcf并实施消息记录,请参见http://msdn.microsoft.com/zh-cn/library/ms730064.aspx

<system.diagnostics>
  <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
                 <add name="messages"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\logs\messages.svclog" />
          </listeners>
      </source>
    </sources>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging 
         logEntireMessage="true" 
         logMalformedMessages="false"
         logMessagesAtServiceLevel="true" 
         logMessagesAtTransportLevel="false"
         maxMessagesToLog="3000"
         maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>