Les gestionnaires HTTP ne s’enregistrant pas correctement sous Mono MVC 3

Je suis à la fin de mon esprit. J’essaie d’exécuter un site Web ASP.NET MVC 3 sous Mono via FastCGI et le gestionnaire HTTP pour Cassette ne s’enregistrera pas correctement. Le site est http://www.tychaia.com/ .

La chose étrange est:

  • Cela fonctionne bien sur ma machine locale.
  • Cela fonctionne bien lorsque le site est exécuté sous xsp4 sur la machine de production.
  • Cela ne fonctionne pas bien lorsque le site est exécuté sous fastcgi-mono-server4 sur la machine de production.

Les choses que j’ai essayées:

  • Vérification de la configuration Nginx, en s’assurant qu’elle transmet tous les parameters FastCGI corrects (c’est le cas).
  • Mono 3.0.7 et 3.0.10. Un ami le fait fonctionner sous 3.0.7, mais pas de dés pour moi.

C’est cette entrée Web.config particulière:

  

( https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Web.config#L47 )

Pour autant que je sache, j’ai deux problèmes à l’origine de ce problème:

  • IgnoreRoute de MVC ne correspond pas à l’URL cassette.axd , même si elle est clairement spécifiée à l’ adresse https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Global.asax.cs#L20 (et fonctionne sous plaine XSP4). Quand j’ajoute un IgnoreRoute explicite pour la chaîne “cassette.axd” (en faisant routes.IgnoreRoute("cassette.axd"); ), lo-and-behold, il commence à passer au gestionnaire, sauf:
  • Le chemin d’access du gestionnaire HTTP du serveur ne semble correspondre qu’à FastCGI. Même lorsque je désactive toute l’enregistrement MVC sur le site, le gestionnaire ne correspond qu’à cassette.axd et même dans ce cas, il semble que le gestionnaire ne possède aucune information de chemin.
  • Lorsque j’ajoute d’autres entrées comme elles sont également traitées par le gestionnaire, mais elles ne le sont pas. t répondre comme il se doit normalement à cette URL; vous obtenez simplement la valeur par défaut comme s’il n’y avait pas de parameters d’URL supplémentaires (ils sont peut-être consommés par la correspondance du chemin du gestionnaire HTTP).

La façon dont FastCGI est actuellement configuré est la suivante:

  • Instance principale de Nginx qui n’est qu’un proxy inverse dans plusieurs instances de Nginx (je gère plusieurs sites et j’aime les garder isolés). Il dirige dans:
  • L’instance Nginx pour http://tychaia.com/ , qui appelle FastCGI sur un socket UNIX.

Encore une fois, ce problème ne se produit pas sous XSP4, il se produit uniquement sous FastCGI. Bien que je puisse inverser le proxy sur une instance XSP4, j’hésite à le faire pour des raisons de performances.

Y a-t-il autre chose que je pourrais manquer ici?

EDIT: Voici quelques URL qui devraient fonctionner. Comme vous pouvez le voir, ils frappent le StaticFileHandler au lieu du gestionnaire HTTP de la cassette:

  • http://tychaia.com/cassette.axd/stylesheet/nDvbK5eAxf6miyaRa_J0vl7YdxA=/Content
  • http://tychaia.com/cassette.axd/script/oz4BBh-gK6gJkhB5S64l3mXseFQ=/Scripts

Et vous pouvez voir que avec IgnoreRoute spécifié explicitement, le chemin cassette.axd mappe, mais seulement ce chemin:

  • http://tychaia.com/cassette.axd

Cela ne fonctionne pas si vous mettez une barre oblique à la fin soit:

  • http://tychaia.com/cassette.axd/

EDIT 2: J’ai mis à jour le site pour /Content/main.css un lien vers le fichier /Content/main.css afin que le site apparaisse correctement lorsque ce problème est sortingé. Si vous vérifiez les demandes du réseau dans votre navigateur, vous verrez les demandes échouées aux ensembles de cassettes.

J’ai déposé un bug sur le traqueur de bogues de Mono, en espérant avoir une réponse à la question:

https://bugzilla.xamarin.com/show_bug.cgi?id=12190

MISE À JOUR: J’ai trouvé la cause du problème. Sous OpenSUSE, mono et XSP sont conditionnés séparément. Même si j’ai mis à niveau Mono vers la version 3.0.10, XSP / FastCGI est toujours resté à la version 2.10.2.0. Lorsque j’ai mis à niveau le package XSP / FastCGI vers 2.11.0.0, le problème a disparu.