我有一個在IIS 7下託管的Web服務(不是WCF服務),Web服務有兩個方法:method1和method2。IIS 7記錄Web服務方法
我期待區分方法1的請求和方法2的請求,而不修改Web服務代碼。
在IIS 7日誌下,我可以看到Web服務的請求,Web服務URL在「cs-uri-stem」字段下記錄,但「cs-uri-query」字段爲空。
有沒有辦法記錄Web服務方法的請求,而無需修改Web服務代碼?
我有一個在IIS 7下託管的Web服務(不是WCF服務),Web服務有兩個方法:method1和method2。IIS 7記錄Web服務方法
我期待區分方法1的請求和方法2的請求,而不修改Web服務代碼。
在IIS 7日誌下,我可以看到Web服務的請求,Web服務URL在「cs-uri-stem」字段下記錄,但「cs-uri-query」字段爲空。
有沒有辦法記錄Web服務方法的請求,而無需修改Web服務代碼?
您可以在處理管道的各種方法中記錄所有傳入的請求。例如,在你的Global.asax
添加一個處理BeginRequest
:
Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext ctx = app.Context;
var requestUrl = ctx.Request.Url;
// the uri should be of a form:
// http://yoursite/theservice.asmx/MethodName
}
我不想修改應用程序代碼,應用程序已經在生產環境中運行......我不知道是否有辦法從IIS級別這樣做! –
下面是來自微軟的官方公報文章: http://support.microsoft.com/kb/313437
1-啓動Internet Information Services(IIS)管理器。
2-展開ServerName,然後展開網站或FTP站點。用鼠標右鍵單擊要啓用日誌記錄的網站或FTP站點,然後單擊「屬性」。
3-單擊網站選項卡,或單擊FTP站點選項卡。
4-單擊以選中啓用日誌複選框。
5-在「活動日誌格式」框中,單擊要使用的格式。
6-單擊屬性,然後指定所需的設置。例如,如果您使用W3C擴展日誌文件格式,請按照下列步驟操作:
a。如果您正在運行IIS 6.0,請單擊常規選項卡。如果您正在運行IIS 5.0或IIS 4.0,請單擊常規屬性選項卡。指定要用於創建新日誌文件的計劃。例如,要每天創建一個新的日誌文件,請單擊每日。
b。如果要使用本地時間,請單擊以選中使用文件命名和翻轉複選框的本地時間。
注意午夜本地時間用於除W3C擴展日誌文件格式之外的所有日誌文件格式。默認情況下,W3C擴展日誌文件格式使用午夜協調世界時(格林尼治標準時間)。要使用本地午夜時間,請單擊以選中使用本地時間進行文件命名和翻轉複選框。
c。如果您正在運行IIS 6.0,請單擊「高級」選項卡。如果您正在運行IIS 5.0或IIS 4.0,請單擊擴展屬性選項卡。
d。指定您想要的選項。例如,指定「自定義數據」部分中列出的屬性。點擊確定。
e。點擊確定。
我在這些日誌中看不到Web服務調用,而且我也沒有看到錯誤... – DestyNova
多年後,我不得不使用數百種方法訪問ASMX,並且無法將其轉換爲WCF。這是一個ASMX擴展點,它允許您在不訪問所有方法的情況下記錄方法名稱。在這裏,我使用log4net的記錄方法名,因人而異
首先,創建一個類的SoapExtension:
namespace MyNamespace {
public class WebMethodLogger : SoapExtension
{
private static readonly ILog _log = LogManager.GetLogger(typeof(WebMethodLogger));
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{
return null; //No state
}
public override object GetInitializer(Type serviceType)
{
return null; //No state
}
public override void Initialize(object initializer)
{
//Do nothing
}
public override void ProcessMessage(SoapMessage message)
{
if (message.Stage == SoapMessageStage.AfterDeserialize)
_log.Debug(message.MethodInfo.MethodInfo.Name);
}
}
}
然後,註冊在你的web.config擴展:
<system.web>
...
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.WebMethodLogger, MyAssembly"
priority="1"
group="High" />
</soapExtensionTypes>
</webServices>
...
</system.web>
你ASMX非常有限。你應該轉移到WCF,這很容易。 –
這怎麼可以使用WCF完成?這可能對我有所幫助,ASMX服務調用WCF服務,並且我可以訪問IIS和託管WCF的機器。 –
只需打開[WCF Tracing](http://msdn.microsoft.com/zh-cn/library/ms730342.aspx)。 –