2010-11-05 5 views
0

Je développe un module HTTP géré qui interceptera les requêtes et les réponses d'IIS 7. Les messages interceptés seront modifiés en fonction d'un ensemble de règles métier par un filtre personnalisé. Les règles métier seront stockées dans un fichier de configuration.Comment déployer un module HTTP géré Site Wide?

Les messages doivent être interceptés sur le site Web. Cela inclut toutes les applications ou répertoires virtuels qui existent en tant qu'enfants du site Web. Ma première tentative à ceci consistait à installer l'assembly de module HTTP dans le répertoire bin du site Web souhaité (par exemple, C: \ inetpub \ wwwroot \ bin pour le site Web par défaut).

Une fois installé, je modifie l'élément <compilation> du fichier web.config du site Web pour faire référence à l'ensemble, comme ceci:

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

J'ai aussi modifié l'élément <modules> du fichier web.config du site Web.

Ceci fonctionne bien pour la plupart du contenu sous le site Web. Cependant, s'il y a une application configurée dans le site Web (par exemple,/wwwroot/MyApplication) Je reçois l'erreur suivante lors de la navigation à toute ressource dans cette application web:

Impossible de charger le fichier ou l'assemblage Société. Product.Module, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = xxxxxxxxxxxxxxxx 'ou l'une de ses dépendances. Le système ne trouve pas le fichier spécifié.

Il y a deux façons que je connais pour contourner ce:

Option 1:

Copiez le montage du module HTTP et tous ensembles dépendants au répertoire bin de chaque application. Je crois que je devrais également dupliquer les informations de configuration du répertoire parent. Cela peut devenir un cauchemar de la gestion que de plus en plus d'applications sont ajoutées au site Web.

Option 2:

Installer l'ensemble de modules HTTP et tous les assemblages à charge dans le GAC. Cela semble fonctionner assez bien et évite beaucoup de frais de gestion, cependant, où vivent les informations de configuration? Si dans le fichier web.config du site Web ces informations sont-elles héritées dans toutes les applications enfants?

Quelle est la méthode recommandée pour le déploiement d'un site de module HTTP géré? Comment la configuration doit-elle être gérée de sorte que toute la configuration soit dans un emplacement central?

Répondre

0

Jusqu'ici vous êtes sur la bonne voie, pouvez-vous mettre vos configs dans machine.config? éviter de maintenir plusieurs config?

+0

Par sur la bonne voie voulez-vous dire l'installation au sein de l'AG C, ou l'installation dans plusieurs répertoires bin? –

+0

installation au sein du GAC –

+0

Je ne suis pas sûr si je serai autorisé à apporter des modifications au fichier machine.config. De plus, j'aimerais pouvoir supporter différentes configurations pour différents sites Web. Par conséquent, je pense que l'emplacement idéal pour cette information est dans web.config. Je devrai vérifier si mes paramètres de configuration sont correctement hérités pour toutes les applications d'un site. –

0

Vous pouvez GAC cette DLL, mais cela casserait votre histoire de déploiement de x-copie si vous en avez déjà un en place. Si cela vous convient, vous pouvez ajouter ce module ultérieurement à la configuration dans applicationHost.config dans les balises de localisation: <location path="MySite">, <location path="MySite/MyApp">

+0

Je ne suis pas sûr si je serai autorisé à apporter des modifications au fichier applicationHost.config. De plus, j'aimerais pouvoir supporter différentes configurations pour différents sites Web. Par conséquent, je pense que l'emplacement idéal pour cette information est dans web.config. Je devrai vérifier si mes paramètres de configuration sont correctement hérités pour toutes les applications d'un site. –

3

déployer le module

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. 

retour vers le haut Configurer le système

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> 

Retour vers le haut test du module

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. 
Questions connexes