[英]HttpModule doesn't seem to work
我創建了一個簡單的HttpModule來記錄我現有的webservice的用法。 有一個包含單個類的dll
public class TrackingModule : System.Web.IHttpModule
{
public TrackingModule(){}
public void Init(System.Web.HttpApplication context)
{
context.BeginRequest+=new EventHandler(context_BeginRequest);
}
public void Dispose()
{
}
private void context_BeginRequest(object sender, EventArgs e)
{
try
{
Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish( new Exception("Log attept") );
HttpApplication app = (HttpApplication)sender;
string method = app.Request.RawUrl;
SaveUseToDatabase( app.Request.UserHostAddress, method );
}
catch( Exception ex )
{
try
{
Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManager.Publish( ex );
}
catch{}
}
}
}
編譯完dll之后,我將它添加到webservice的bin文件夾中,並在webservice的web.config中添加:
<system.web>
<httpModules>
<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule, WebserviceTrackingModule"/>
這在我的計算機上工作正常,但當我將其復制到生產服務器時,沒有任何反應。 數據庫中沒有新條目,ExceptionManager沒有記錄任何條目。 好像它根本不在那里。
我能錯過什么?
編輯:執行另一個測試后,我可以添加它,當我為具有自己的頂級虛擬目錄的webservice添加它時它可以工作。 它不適用於駐留在作為另一個虛擬目錄的子文件夾的虛擬目錄中的Web服務。
我知道HttpModules設置正在被子目錄繼承,但看起來父目錄的存在會妨礙它。
我相信我找到了更好的解決方案。 在運行時而不是在Web配置中附加模塊。 查看Rick Strahl的博客文章了解詳情。
好的,我正在回答我自己的問題。
在子目錄的web.config中定義<httpModules>時,即使將子目錄配置為應用程序,它也不起作用。 到目前為止,我找到的唯一解決方案是在根應用程序(父目錄)的web.config中的<location>標記內定義它們。
我不喜歡它:(
我在http://forums.iis.net/t/1151924.aspx找到了這個問題的答案
哦,一點點的消除過程永遠不會讓我失望。
在盯着3.5相關的web.config代碼后,我意識到我的模塊需要添加到新的部分:
<system.webserver>
<模塊>
而不是system.web ...至少它現在正在工作。
所以翻譯一下:
如果您遇到httphandlers問題
將您的處理程序添加到system.webserver中的modules節點,並查看是否有效復制用於scriptmodule的格式。
這有用嗎?
<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule" />
是否肯定會為每個請求調用context_BeginRequest方法?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.