2010-06-25 9 views
2

Par architecture plug-in ASP.NET MVC, Plug-in architecture for ASP.NET MVCASP.NET MVC VirtualPathProvider ne fonctionne pas sous IIS 6

J'ai séparé DLL (plug-in) qui contient les vues, CSS et JavaScript fichiers dans les ressources. Donc mon propre VirtualPathProvider chargera le contenu de la DLL si c'est pour le plugin. Cela fonctionne très bien pendant le développement. Mais il semble ne pas fonctionner une fois que je l'ai déployé dans IIS. (Je l'cartographié whidcard dans IIS 6 et les vues sont affichées)

Je me suis inscrit mon VirtualPathProvider dans global.asax comme

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider()); 
} 

Par exemple. http://localhost/Plugin/MyPlugin.dll/Styles.MyStyles.css

Cela devrait être chargé à partir du plugin.dll mais retourne IIS 404.

Je suppose que les fichiers statiques sont tous gérés par IIS et non passés par asp.net et mon VirtualPathProvider? Est-il possible de contourner cela? S'il te plaît, fais la lumière.

Merci d'avance.

Répondre

1

J'ai trouvé la solution de contournement en ajoutant staticFileHandler dans l'élément httpHandlers de web.config.

<add verb="GET,HEAD,POST" path="*" type="System.Web.StaticFileHandler" validate="true" /> 
+0

Merci beaucoup pour cela. Je commençais à m'inquiéter je devrais demander de mettre à niveau les machines de production à IIS7 ... – Greg

2

S'il s'agit de IIS 6, vous aurez besoin d'un mappage générique. Voir this blog post de Phil Haack.

+0

J'ai fait le mappage générique dans IIS 6 comme je l'ai mentionné dans le message. –

+0

Merci, mais ne fonctionne toujours pas pour l'URL comme http: //localhost/Plugin/MyPlugin.dll/Styles.MyStyles.css J'ai placé la journalisation avec mon MyVirtualPathProvider, il n'était même pas exécuté par l'URL ci-dessus. tout fonctionne très bien dans le serveur de développement Web Visual Studio si, tout indice? –

0

J'ai eu un certain nombre de problèmes pour obtenir une bibliothèque compilé externe contenant des ressources et des contrôleurs pour travailler dans notre environnement MVC. Il est utilisé dans plusieurs projets et erreurs différentes ont fait surface dans différents projets voici donc toutes les choses que je devais faire (à ce jour) pour assurer les travaux de manutention de fichiers statiques:

  1. Inclure StaticFileHandler dans web.config, par exemple:

    < ajouter verb = "GET, HEAD" path = "* de" name = type "statique pour js" = "System.Web.StaticFileHandler"/>

  2. des éléments statiques sont Assurez-vous ignorés dans le routage:

    routes.IgnoreRoute ("{* staticfile}", nouveau {staticfile = @ ". * \ (css | js | gif | jpg) (/ *.) « });

  3. Inscrivez-vous un fournisseur de chemin virtuel, par exemple:.?

    System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new EmbeddedResourceVirtualPathProvider.Vpp(assemblies.ToArray()) 
        { 
         //you can do a specific assembly registration too. If you provide the assemly source path, it can read 
         //from the source file so you can change the content while the app is running without needing to rebuild 
         //{typeof(SomeAssembly.SomeClass).Assembly, @"..\SomeAssembly"} 
        }); 
    
  4. Non requis pour les fichiers statiques, mais Il convient de mentionner ce qui était nécessaire pour obtenir les vues/contrôleurs de travail, qui ajoutais MvcContrib et enregistrement du moteur vue intégrée:

    PortableAreaRegistration.RegisterEmbeddedViewEngine();

Questions connexes