很久以前我写过仍在使用的webservice。现在我打算重构它。 Web服务充满了很可能未使用的功能,我不知道客户端如何使用它。为了去除未使用的函数,我需要分析当前安装的webservice的函数调用和数据。
是否有(免费/开源)工具可以让我记录网络服务的所有活动。
我正在寻找的工具的理想输出可能是一个包含所有被调用函数的数据库,以及每次调用时发送给它的数据列表。
在Martins的帮助下,我创建了这个HttpModule,它完全符合我的要求:
public class LoggingModule : IHttpModule
{
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(BeginRequest);
}
private void BeginRequest(object sender, EventArgs e)
{
TryAppendLog("Content-Type");
TryAppendLog("SOAPAction");
}
void TryAppendLog(string key)
{
string value = HttpContext.Current.Request.Headers[key];
if (string.IsNullOrEmpty(value)) { return; }
HttpContext.Current.Response
.AppendToLog(string.Format("{0}: {1} ", key, value));
}
#region IHttpModule Member
public void Dispose() { }
#endregion
}
答案 0 :(得分:4)
正如Kobi所写,您可以在IIS日志文件中找到所需的信息(即在c:\ WINDOWS \ system32 \ LogFiles \ W3SVC1中)。
如果要将使用情况记录到数据库中,可以编写一个简单的HttpModule,它检查每个请求,如果是对Web服务的调用,则将其记录到数据库中。 例如。这是一个非常简单的HttpModule的相关部分,它记录了对mywebservice.asmx的调用:
public class MyWebServiceDiagnosticsModule : IHttpModule
{
public MyWebServiceDiagnosticsModule ()
{
}
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(BeginRequest);
}
private void BeginRequest(object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
string url = ctx.Request.Url.ToString().ToLower();
if (url.Contains("mywebservice.asmx"))
{
LogMethodCall(url); // parse URL and write to DB
}
}
}
答案 1 :(得分:0)
您可以编写自己的IHttpHandler来记录所有信息,然后将调用委托给适当的.NET HTTP Handler,但这不是一项简单的任务。
关于术语的一句话。 “重构”不是关于改变外部行为,所以如果重构真的是你想要的,我建议保持Web服务的公共合同(接口)不变。相反,只推出具有核心功能的同一服务的新版本。
答案 2 :(得分:0)
您可以在IIS中启用日志记录,根据您的选择,它们可以非常详细 有专门用于分析IIS日志的工具。
答案 3 :(得分:0)
根据您的负载/关键性和类似的限制,您还可以将流量路由为像SoapUI这样的Soap代理来捕获和分析流量一段时间。如果您设置代理并在防火墙级别重新路由,则对最终用户应该是透明的。
我已经没有为负载较重的系统尝试过此操作;警告。