2008-12-18 187 views
3

我創建了一個簡單的HttpModule來記錄我現有的webservice的用法。還有一個包含單個類HttpModule似乎不起作用

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編譯的dll我把它添加到Web服務的bin文件夾和Web服務的web.config後,我補充一下:

<system.web> 
    <httpModules> 
     <add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule, WebserviceTrackingModule"/> 

這在我的電腦上工作正常,但是當我將它複製到生產服務器,沒有任何反應。數據庫中沒有新條目,沒有條目由ExceptionManager記錄。彷彿它根本就沒有。

我可以錯過什麼?

編輯: 執行另一個測試後,我可以補充說,它適用於具有自己的頂級虛擬目錄的web服務時。它不適用於位於另一個虛擬目錄的子文件夾的虛擬目錄中的Web服務。

我知道HttpModules設置正在被子目錄繼承,但它看起來像父目錄存在的方式。

回答

3

我相信我已經找到了更好的解決方案。在運行時而不是在Web配置中附加模塊。詳細信息請查看Rick Strahl's blog post

+0

我有一個WCF服務應用程序,它是主站點下的虛擬目錄。通過web.config添加我的模塊導致了一個IIS 500錯誤,沒有任何關於錯誤的細節(我期望在Windows事件日誌中看到一些東西,但什麼都沒有)。 Rick Strahl的技術非常完美(儘管我花了一段時間才意識到必須從Studio中添加一個「全局應用程序類」,並且Global.asax文件必須部署到我的站點)。 – 2013-08-23 21:37:33

0

這是行不通的嗎?

<add name="TrackingModule" type="WebserviceTrackingModule.TrackingModule" /> 

而且是每個請求肯定會調用的context_BeginRequest方法嗎?

+0

是的,它既可以在我的開發機器上運行,也可以在其他web服務的生產服務器上運行。正如我現在在問題描述中添加的,問題可能來自父目錄... – user34402 2008-12-18 15:31:27

1

好的,我正在回答我自己的問題。

當您在子目錄的web.config中定義<httpModules>時,即使將子目錄配置爲應用程序,它也不起作用。我目前發現的唯一解決方案是在根應用程序(父目錄)的web.config中的<位置>標記中定義它們。

我不喜歡它:(

1

我找到了這個問題的答案在http://forums.iis.net/t/1151924.aspx

哦,有點 消除過程中,從來沒有失敗 我。

在注意到與3.5相關的 web.config代碼後,我意識到我的 模塊需要添加到新的 部分:

<system.webserver>

        <模塊>

代替的System.Web ......至少是現在 工作。

所以翻譯是:

如果您有HttpHandlers的

問題的處理程序添加到模塊節點system.webserver,看看是否能工程 複製用於scriptmodule格式。

+1

我目前遇到同樣的問題,但這似乎並沒有爲我「做竅門」...一切正常開發機器(Windows 7 + Visual Web Developer 2008 Express),但是當我部署到生產服務器(Windows 2003)時,它不起作用。 – XpiritO 2010-09-16 15:18:41