2016-07-14 105 views
0

我在我的IIS中創建了一個默認網站,我在其中創建了一個虛擬目錄「wsdls」。在IIS中的虛擬目錄上使用HTTP模塊

enter image description here

我想收集多少請求觸發到我的虛擬目錄的統計信息。這需要在Web服務器級別收集請求並收集統計信息。 「HTTPModule」是我考慮過的適用於這種情況的衆多解決方案之一。因此我已經開始建設一個。

爲了測試目的,我想創建一個HTTP模塊並將其應用於特定的擴展文件(如* .wsdl)以及此虛擬目錄中的任何.wsdl文件的每個GET請求,我都希望重定向申請到「www.google.com」。這將演示HTTP模塊如何在IIS上使用和部署的一個很好的例子。

的HttpModule這是使用Visual Studio編寫如下所示,

namespace Handler.App_Code 
{ 
    public class HelloWorldModule : IHttpModule 
    { 
     public HelloWorldModule(){ 
     } 

     public String ModuleName{ 
      get { return "HelloWorldModule"; } 
     } 

     // In the Init function, register for HttpApplication 
     // events by adding your handlers. 
     public void Init(HttpApplication application){ 
      application.BeginRequest += 
       (new EventHandler(this.Application_BeginRequest)); 
      application.EndRequest += 
       (new EventHandler(this.Application_EndRequest)); 
     } 

     private void Application_BeginRequest(Object source, 
      EventArgs e) 
     { 
      // Create HttpApplication and HttpContext objects to access 
      // request and response properties. 
      HttpApplication application = (HttpApplication)source; 
      HttpContext context = application.Context; 
      context.Response.Redirect("www.google.com");    
     } 

     private void Application_EndRequest(Object source, EventArgs e) 
     { 
      //Nothing to be done here 
     } 

     public void Dispose() { } 
    } 
} 

現在我已經做了這個項目針對x64版本的構建和我能夠瀏覽器成功的「DLL」文件。現在我必須在IIS中註冊此dll,並且每當我嘗試訪問* .wsdl文件時,請求都會自動轉到「www.google.com」。這裏是下一個步驟我都做了,

enter image description here

然後我啓用了處理器映射,如下圖所示,

enter image description here

我假定這就是它!沒有更多的事情要做。我應該能夠攔截所有形式爲「* .wsdl」的HTTP請求的請求。這意味着每當我從服務器訪問任何wsdl時,控制應該回到谷歌(因爲寫入開始請求的邏輯)。但不幸的是,我未能實現它。這裏可以做些什麼?

+0

如果我是你,我會使用IIS日誌文件來獲得命中數而不是寫模塊。 –

+0

我的要求是攔截每個請求並將請求詳細信息發佈到另一個收集信息並將其放入數據庫的應用程序。其中一種方法是使用HTTP模塊,我不想讓整個要求複雜化。我正在繼續處理它,並且在通過IIS應用HTTP模塊時遇到問題,這就是本文的原因。從我的角度來看,「點擊次數」可能只是一個例子,但是要求使用IIS上的「HTTP模塊」。 –

回答

0

一兩件事我注意到的是,當您試圖重定向到一個外部URL使用HTTP ://

因此改變 context.Response.Redirect( 「www.google.com」); 至 context.Response.Redirect(「http://www.google.com」,true);

+0

謝謝。但這並沒有幫助我Kaushik。 –

0

我可以解決我所面臨以下問題是其失蹤在我的理解和觀察這幫助我解決我的問題:

查找正確的web.config文件:

  • IIS中的每個網站都會有一個web.config文件來控制應用程序。
  • 由於我使用「默認網站」,這是指目錄"C:\\inetpub\\wwwroot"
  • 將有一個「web.config」文件,將出現在這位導演。如果不存在,請創建它。

修改網頁。配置:

  • 一旦你已經確定了需要修改的文件,只需添加必要的模塊配置的web.config
  • 在這種情況下,我們會想一個模塊添加到默認的網站中,也許下面的設置將顯示,

enter image description here 添加內容bin目錄:

  • 現在,如果您嘗試運行該應用程序,則IIS將找不到任何要運行的dll或可執行文件,因此我們需要將可執行文件保留在特定位置。
  • 創建一個導演,如果尚未在目錄的根目錄中出現名稱「bin」,並放置您希望該網站執行的所有dll。如下圖所示樣品,

enter image description here

。你需要考慮:

  • 適當的訪問必須爲它由DLL的文件夾中給出。
  • 理想情況下,不建議修改整個網站。如果一個人只在他們的Web應用程序上工作,那將是理想的。
  • 如果找不到web.config,我們可以創建一個。
  • 如果bin不在Web根目錄中,我們可以創建一個。