2010-04-29 12 views
0

J'ai une application qui a démarré comme une application MVC (1.0) dans Visual Studio 2008 Sp1 avec un tas de projets Silverlight 3 dans le cadre du site . Rien d'extraordinaire. Utilisation de Ninject pour l'injection de dépendance (première version bêta 2, maintenant la version 2 avec les extensions MVC). Avec la sortie de .Net 4.0, VS2010, MVC2, etc., nous avons décidé de déplacer l'application vers la toute dernière plate-forme. L'assistant de conversion dans VS2010 a apparemment pris soin de tout, à une exception près - il n'a pas changé les références à mvc1 pour maintenant pointer sur mvc2, donc je devais le faire manuellement. Bien sûr, cela me fait penser à d'autres choses MVC2 qui pourraient manquer à mon application, ce serait là si je faisais Fichier -> Nouveau Projet ... Mais ce n'est pas l'objet de cette question.Déploiement de l'application MVC2 sur IIS7.5 - Ninject a demandé de fournir des contrôleurs pour les fichiers de contenu

Lorsque je déploie cette application sur le serveur IIS 7.5 (sous Win2008 R2 x64), l'application fonctionne en tant que telle. Cependant, les images, les scripts et autres contenus statiques ne semblent pas exister. Bien sûr, ils sont là sur le disque sur le serveur, mais ils n'apparaissent pas dans le navigateur Web du client. Je suis assez nouveau à IIS, donc le seul truc que j'ai connu est d'essayer d'ouvrir la page web dans un navigateur sur le serveur, car cela pourrait me donner plus d'informations. Et ici, enfin, nous rencontrons notre ennemi. Si j'essaye d'aller directement à l'URL de l'une des images (http://server/Content/someimage.jpg par exemple), j'obtiens l'erreur suivante dans le navigateur:

L'IControllerFactory 'Ninject.Web.Mvc.NinjectControllerFactory' n'a pas retourné un contrôleur pour un contrôleur nommé "Contenu".

Aha. Le serveur Web essaie de transmettre cette requête à MVC qui, avec son paramétrage de routage par défaut, considère que Content est un contrôleur et échoue.

Comment puis-je l'obtenir pour traiter Content/et Scripts/(entre autres) en tant que non-contrôleurs et juste passer à travers le contenu statique? Cela fonctionne bien sûr avec Cassini sur ma machine de développement, mais dès que je déploie, ce problème frappe.

J'utilise la dernière version de Ninject MVC 2 où l'outil IoC devrait transmettre les contrôleurs manquants à la base du contrôleur de base, mais cela n'a apparemment pas aidé. J'ai également essayé d'ajouter des routes ignorées pour le contenu etc., mais cela n'a apparemment aucun effet non plus. Je ne suis même pas sûr d'aborder le problème au bon niveau.

Est-ce que quelqu'un sait où chercher pour obtenir cette application? J'ai le plein contrôle du serveur web, donc je peux faire plus ou moins ce que je veux, tant que ça commence à fonctionner.

Merci!

Répondre

1

Transforme ce a été causé par certains paramètres de compte - je ne connaissais pas IIS AppPool \ compte sitename automatiquement créé par IIS dans le serveur Win2008 R2.Après avoir essayé "tout", je suis tombé sur cette information, j'ai donné les droits appropriés, et tout s'est mis à fonctionner magiquement.

Assez difficile à déboguer, en particulier pour quelqu'un (moi) avec une expérience IIS très limitée.

+2

Et quels étaient les droits appropriés? Juste accorder lecture pour le compte en cours d'exécution du pool d'applications? –

4

J'ai eu un problème similaire avec StructureMap et favorite.ico ce que j'ai fini par faire était d'ajouter une route pour ignorer ce chemin.

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.IgnoreRoute("favicon.ico"); 

Gardez à l'esprit que je ne sais absolument pas vraiment, mais une autre chose qui a changé est la nécessité d'Default.aspx, même si vous avez des pages personnalisées celles aurait besoin de cartographiés. Ce sont les deux seuls problèmes que j'ai eu avec le routage.

 routes.RouteExistingFiles = false; 

EDIT: Je voulais dire que les RouteExistingFiles devraient être faux sinon je reçois cette exception dans MVC2 :)

+0

Merci pour votre réponse. J'ai examiné cela, et malheureusement cela n'a pas fonctionné. Je suis en train de le traquer avec une fourche, plus tard. Je vote ceci cependant car il peut probablement aider avec d'autres issues que le mien! –

+0

Ajout de l'ignoreroute pour favicon est ce que je voulais, acclamations :) – Moo