2010-11-05 52 views
0

我正在開發一個管理HTTP模塊,它將攔截IIS 7的請求和響應。攔截的消息將根據一組自定義過濾器的業務規則進行修改。業務規則將存儲在配置文件中。如何部署受管理的HTTP模塊全網站?

該消息必須被攔截的網站廣泛。這包括任何作爲網站子項存在的應用程序或虛擬目錄。我的第一個嘗試是將HTTP模塊程序集安裝到所需網站的bin目錄中(例如,默認網站的C:\ inetpub \ wwwroot \ bin)。

一旦安裝我修改網站的web.config文件的<compilation>元素引用的程序集,像這樣:

<compilation debug="false"> 
    <assemblies> 
     <add assembly="Company.Product.Module, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" /> 
    </assemblies> 
</compilation> 

我還修改了網站的web.config文件的<modules>元素。

這適用於網站下的大多數內容。但是,如果有網站(例如,/ wwwroot文件/所有MyApplication)根據該Web應用程序導航到任何資源時我收到以下錯誤下配置的應用程序:

無法加載文件或程序集 「公司。 Product.Module, Version = 1.0.0.0,Culture = neutral, PublicKeyToken = xxxxxxxxxxxxxxxx'或 其依賴項之一。系統 找不到指定的文件。

有兩種方法,我知道解決這個問題:

選項1:

複製HTTP模塊組裝和所有相關組件到每個應用程序的bin目錄。我相信我也需要從父目錄複製配置信息。隨着越來越多的應用程序被添加到網站上,這可能會成爲管理的噩夢。

選項2:

安裝HTTP模塊組件和在GAC所有依賴程序集。這似乎工作得很好,避免了很多管理開銷,但是,配置信息在哪裏存在?如果在網站的web.config文件中,這些信息是在所有子應用程序中繼承的?

部署託管HTTP模塊站點範圍的推薦方法是什麼?應如何處理配置以便所有配置都位於中央位置?

回答

0

到目前爲止,你在正確的軌道上,你可以把你的配置在machine.config?避免維護多個配置?

+0

通過在正確的軌道上,你的意思是安裝在GA中C,還是安裝在多個bin目錄中? – 2010-11-06 19:14:46

+0

在GAC中安裝 – 2010-11-06 19:30:34

+0

我不確定是否允許修改machine.config文件。另外,我希望能夠支持不同網站的不同配置。因此,我認爲這個信息的理想位置在web.config中。我需要調查一下,看看我的配置設置是否可以在網站中的所有應用程序中正確地繼承。 – 2010-11-08 03:58:49

0

你可以通過GAC這個DLL,但是如果你已經有了一個,它會破壞你的x-copy部署故事。如果你可以,你可以稍後將這個模塊添加到applicationHost中的配置中。配置在位置標籤:<location path="MySite">, <location path="MySite/MyApp">

+0

我不確定是否允許修改applicationHost.config文件。另外,我希望能夠支持不同網站的不同配置。因此,我認爲這個信息的理想位置在web.config中。我需要調查一下,看看我的配置設置是否可以在網站中的所有應用程序中正確地繼承。 – 2010-11-08 03:58:16

3

部署模塊

Create a new directory under C:\Inetpub\Wwwroot named Module. 
Create a subdirectory named Bin in the newly created Module directory. The resultant path is C:\Inetpub\Wwwroot\Module\Bin. 
Copy MyModule.dll from your project's Bin\Debug directory to the C:\Inetpub\Wwwroot\Module\Bin directory. 
Follow these steps to mark the new Module directory as a Web application: 
    Open Internet Services Manager. 
    Right-click the Module directory, and then click Properties. 
    On the Directory tab, click Create. 
    Click OK to close the Module Properties dialog box. 

回到頂端 配置系統

In the C:\Inetpub\Wwwroot\Module directory, create a new file named Web.config. 
Paste the following text into Web.config: 


<configuration> 
    <system.web> 
     <httpModules> 
     <add name="MyModule" type="MyModule.SyncModule, MyModule" /> 
     </httpModules> 
    </system.web> 
</configuration> 

回到頂端 測試模塊

In the C:\Inetpub\Wwwroot\Module directory, create a new .aspx file named Test.aspx. 
Paste the following text into Test.aspx: 


<%@Page Language="VB"%> 
<% Response.Write("Hello from Test.aspx.<br>") %> 


In the C:\Inetpub\Wwwroot\Module directory, create a Global.asax file. 
Paste the following code in Global.asax: 


<%@ Import Namespace="MyModule" %> 

<script language="VB" runat=server > 
Public Sub MyModule_OnMyEvent(src As Object, e As EventArgs)  
    Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>") 
End Sub 
</script> 


Request the Test.aspx page. You should see the following lines of text: 


Hello from OnBeginRequest in custom module. 
Hello from MyModule_OnMyEvent called in Global.asax. 
Hello from Test.aspx.