2010-06-17 6 views
1

Je suis confronté à un problème qui semble lié à la configuration.Server.TransferRequest renvoie une page vierge sur un serveur spécifique

J'ai une application Web basée sur MonoRail, où nous utilisons la fonction de routage de MonoRail. Sur la première requête après le démarrage de l'application, le routage n'est pas initialisé. Pour contourner cela, je le code suivant dans Application_OnError():

public virtual void Application_OnError() 
{ 
    if (// identified as routing error) 
    Server.TransferRequest(Context.Request.RawUrl, false); 
    return; 
} 

Problème beeing que sur notre serveur de développement (qui gère le serveur 2008 R2, avec IIS 7.5 et .NET 3.5) retourne une page blanche sans en-tête, mais sur mon poste de travail (qui exécute win7, IIS 7.5 et .NET 3.5) cela fonctionne bien.

Quelle est la cause de ceci? Si le code dans Application_OnError() renvoie une exception, quelle serait la sortie attendue?

J'ai vérifié les éléments suivants:

  • L'accès journal montre une entrée, je ne sais pas si un TransferRequest apparaîtrait comme une deuxième entrée lorsqu'elle est appelée avec succès
  • L'application font réellement une fonctionne en fonction de mes journaux internes, et il ne meurt pas car une demande ultérieure fonctionne parfaitement (parce que le routage sera actif)

Des conseils sur ce qu'il faut rechercher seraient grandement appréciés!

Répondre

1

Le pool d'applications sur l'installation du serveur est-il configuré pour utiliser le pipeline intégré? Il doit être en ordre pour que Server.TransferRequest fonctionne.

De MSDN Documentation:

Cette méthode est utilisée lors de l'exécution du mode de pipeline intégré dans IIS 7.0 pour permettre le traitement de la demande de transfert d'un type de ressource à l'autre pendant l'exécution de la demande de cible avec le contexte de requête correct.

+0

Belle suggestion, mais la piscine de l'application est définie comme intégrée, ce n'est pas le cas, désolé. – jishi

0

Vous devrez peut-être configurer votre routage pendant Application_OnStart() afin que le routage soit enregistré à temps pour votre première demande.

http://www.castleproject.org/monorail/documentation/trunk/advanced/routing.html
http://www.kenegozi.com/blog/2009/02/10/monorail-routing-and-the-homepage-routing-rule.aspx

Où l'avez-vous inscrire des itinéraires en ce moment?

suggestions supplémentaires

Voici quelques plus de choses à regarde autour CompleteRequest et URL Rewriting:
http://msmvps.com/blogs/luisabreu/archive/2007/10/09/are-you-using-the-new-transferrequest.aspx
http://support.microsoft.com/kb/817036

Une suggestion est d'essayer Request.Redirect à la place.

+0

Je les ai enregistrés dans Application_OnStart() aujourd'hui, et je pense qu'il y a un glith sur la première requête qui déclenche le démarrage de l'application, où RoutingModuleEx est réellement appelé avant le démarrage de l'application (donc, ne pas réécrire la première requête). Je pense que cela ne fonctionne correctement que lors de la définition des routes dans web.config, pas dans le code. – jishi

+0

Je ne me rappelle pas vraiment pourquoi nous avons utilisé le Server.TransferRequest, mais je pense que c'était pour le rendre transparent pour le visiteur, mais toujours en invoquant la requête à travers tous les modules disponibles. Une réponse.Redirect fonctionnerait probablement, mais cela devrait fonctionner car il "fonctionne sur ma machine" – jishi

1

Je pense qu'il y a une erreur de lancer, mais vous ne le voyez pas parce que votre page est prête pour une autre erreur et vous devez le capturer de cette façon.Après cela, vous pouvez trouver le vrai problème, parce que de mes contrôles dans TransferRequest peut être beaucoup pense que donner une erreur.

public virtual void Application_OnError() 
{ 
    if (identified as routing error) 
    { 
     try 
     {  
      Server.TransferRequest(Context.Request.RawUrl, false); 
     } 
     catch(Exception x)  
     { 
      LogTheError(x.ToString()); 
     } 
    } 

    return; 
} 
+0

Je vais essayer, merci! – jishi

0

Une chose que vous devriez examiner est Server.ClearError(). Il y a quelques changements de rupture de Win 7 et Server 2008 avec le pipeline et les erreurs.

http://mvolo.com/blogs/serverside/archive/2007/12/08/IIS-7.0-Breaking-Changes-ASP.NET-2.0-applications-Integrated-mode.aspx

Regardez l'article n ° 21 dans la liste.

Vous ne savez pas si c'est votre problème, mais il semble que ce soit quelque chose qui vaut la peine d'être vérifié.

+0

Hm, mais mon dev-machine est Win 7 (qui fonctionne) et le stage-server est 2008 R2 (qui échoue). Je suppose que ces versions devraient être presque identiques? – jishi

+0

Je devine qu'il y a un changement entre 2008 R2 et Win 7 qui n'a peut-être pas été attrapé. Il pourrait être intéressant d'essayer une machine 2008 (non R2) et de voir si vous avez toujours ce problème. Je suppose que vous ne le ferez probablement pas. – spinon

Questions connexes