2010-03-23 10 views
2

J'ai le bit de code suivant qui a fonctionné comme prévu avant la mise à niveau vers Integrated Pipeline dans IIS7.Pipeline intégré IIS7 - Response.End ne terminant pas la demande

public void RedirectPermanently(string url, bool clearCookies) 
{ 
    Response.ClearContent(); 
    Response.StatusCode = 301; 
    Response.AppendHeader("Location", url); 
    if(clearCookies) 
    { 
    Response.Cookies.Clear(); 
    Response.Flush(); 
    Response.End(); 
    } 
} 

Auparavant, lorsque cette méthode a été exécuté, si clearCookies était vrai, la réponse serait envoyée au traitement du client et demande mettrait fin. Maintenant, sous Integrated Pipeline Response.End() ne semble pas terminer le traitement. La page continue de s'exécuter comme si la méthode n'avait jamais été appelée.

La grande question est, pourquoi et qu'est-ce qui a changé!

Merci.

Répondre

3

Response.End déclenchera seulement ThreadAbortException lorsque HttpContext.IsInCancellablePeriod est vrai.

Un effet secondaire de Response.Flush() est que les causes HttpContext.IsInCancellablePeriod deviennent fausses lors de l'exécution en mode pipeline intégré. Essayez de supprimer Response.Flush() de votre code. Si vous terminez la réponse, le flux de réponse sera vidé de toute façon.

+0

Ouais, ça l'a fait. Merci! – MikeGurtzweiler