簡體   English   中英

分析ASP.NET Web服務的使用

[英]Analyze the use of a ASP.NET webservice

很久以前,我編寫了仍在使用的Web服務。 現在,我計划對其進行重構。 Web服務充滿了最有可能未使用的功能,我不知道客戶端如何使用它。 為了剝離未使用的功能,我需要分析功能調用和當前安裝的Web服務的數據。

是否有一個(免費/開源)工具,使我能夠記錄Web服務的所有活動。

我要尋找的工具的理想輸出可能是一個包含所有被調用函數的數據庫,以及每個調用發送給它的數據列表。

借助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
}

正如Kobi所寫,您可以在IIS日志文件(即c:\\ WINDOWS \\ system32 \\ LogFiles \\ W3SVC1)中找到所需的信息。

如果要將使用情況記錄到數據庫中,可以編寫一個簡單的HttpModule,它檢查每個請求,如果是對Web服務的調用,則將其記錄到DB中。 例如,這是一個非常簡單的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
        }
    }
}

您可以編寫自己的IHttpHandler來記錄所有信息,然后將調用委派給適當的.NET HTTP Handler,但這不是一個簡單的任務。

還有一個術語。 “重構”與更改外部行為無關,因此,如果重構確實是您要的目標,那么我建議保持Web服務的公共合同(接口)完整。 而是僅使用核心功能推出相同服務的新版本。

您可以啟用IIS中的日志記錄,根據您的選擇,它們會變得非常詳細。
有專門用於分析IIS日志的工具。

稍微依賴於您的負載/關鍵程度和類似的約束,您可能還可以像SoapUI這樣通過Soap Proxy通過Soap Proxy路由流量以捕獲並分析一段時間的流量。 如果您設置代理並在防火牆級別重新路由,則它對最終用戶應該是透明的。

對於負載較重的系統,我還沒有嘗試過。 被警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM