我有一组web服务,我想添加一个跟踪层。我不想修改每个web服务,因为我有很多服务。我想写日志,每次进入一个网络服务:网络服务的名称和参数。
最好的方法是什么?
附注:我正在使用asp.net和C#。
编辑:我只想包装web服务,因为每个服务都有log(..)在开始的时候。
发布于 2011-01-18 01:18:52
实现这一点的一种常见方法是注入SOAP扩展。在那里,您可以拦截原始SOAP中的每个请求/响应数据包。示例显示了如何实现它,解释描述了它的工作原理以及如何配置它。
示例:
http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx
解释:
http://msdn.microsoft.com/en-us/library/esw638yk(vs.71).aspx
配置:
http://msdn.microsoft.com/en-us/library/b5e8e7kk(v=vs.71).aspx
<configuration>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="{Type name}, {Assembly}" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
</system.web>
</configuration>发布于 2011-01-17 22:53:08
将Global Application Class Global.asax文件添加到项目中,并将日志记录逻辑添加到Application_BeginRequest()方法中。发送者对象将包含HTTP请求和参数。您可以只过滤.asmx请求并记录这些请求。
protected void Application_BeginRequest(object sender, EventArgs e)
{
}发布于 2011-01-18 03:10:55
编辑--
试一试PostSharp。这是获得此功能的最简单方法。为了后人,我将在下面留下我的帖子,但忽略它,使用PostSharp。
如果您的web服务是WCF,那么您应该查看http://msdn.microsoft.com/en-us/magazine/cc163302.aspx。
在此过程中的每一步,它们都提供了您可以插入的扩展点。您可以使用这些可扩展性点来实现各种自定义行为,包括消息或参数验证、消息日志记录、消息转换。
毫无疑问,这是WCF服务的发展方向。否则,如果它们只是web服务,那么您可以使用Unity框架以及hookup和Interceptor来做同样的事情。
https://stackoverflow.com/questions/4632124
复制相似问题