2009-07-14 21 views
9

Softsys Hosting hakkında iyi şeyler duydum ve bu yüzden ASP.NET MVC çözümümüzü onlara aktarmaya karar verdim. Ama onlar üzerinde koşmazdı. Sorunu BeginRequest olay işleyicilere doğru tespit edebildim. Onlarda olsaydım, bir hata alırdım. İşte benim kodum.Neden ana bilgisayarım (softsyshosting.com) BeginRequest ve EndRequest olay işleyicilerini desteklemiyor?

Sorunu, yalnızca varsayılan ASP.NET MVC uygulamasını oluşturarak ve yukarıdaki kodu ekleyerek yeniden oluşturabilirim. Garip olan şey, bu kod eski sunucumda iyi çalıştı ve sadece yeni (paylaşılan) ana bilgisayarımda çöküyor. Benim kodunda bu olay işleyicileri varsa bu hatayı alıyorum:

Server Error in '/' Application.   Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.] System.Web.PipelineModuleStepContainer.GetStepArray(RequestNotification notification, Boolean isPostEvent) +27 System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification notification, Boolean isPostEvent) +11 System.Web.PipelineStepManager.ResumeSteps(Exception error) +205 System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +91 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +514

Ben Softsys ile bu sorun giderme çalıştım ama onlar temelde onlar sadece ben "ASP.NET Boru Hattı dönmüştü doğruladı çok yararlı değildi (MVC) "yönetici kontrol panelimdeki işlevsellik.

birisi Can: Yanlış bir şey kodlanmış verdiyseniz

  1. bu hata diğeri ana bilgisayarda ortaya çıkan ve neden
  2. bana bana
  3. -etrafında çalışmalarını açıklar göster bana.
+0

bu oldukça size barındırma desteği için bir soru olmaz mı? –

+0

NHibernate'i herhangi bir şansla kullanıyor musunuz? –

+0

Oliver, evet Softsys Hosting'den destek almaya çalıştım ama çok yardımcı olmadılar. Bu sorunu gidermek için bana 95 $/HR tutarında ödeme yapmak istediler. Onlarla ilgili her şeyden memnun kaldım ve yanlış yaptığım bir şey varsa onları vermek istemiyorum. Dreas, hayır NHibernate kullanmıyorum. – Whozumommy

cevap

7

IIS 6 veya IIS 7 Classic modundan IIS 7 Tümleşik moduna geçtiğiniz gibi görünüyor. IIS 7 tümleşik modda, İstek işleme, uygulama başlangıcından ayrıştırıldı. This article, kullanıcının ve nerede olduğunu açıklıyor.

Düzeltmek için kodunuzu bunun yerine Application_BeginRequest konumuna taşımanız gerekir.

16

Her bir HttpApplication örneğindeki işleyicilerinizi kaydettirmeniz gerekir. Birden çok havuzlanmış örnek HttpApplication olabilir. Application_Start yalnızca bir kez çağrılır (klasik modda IIS 6 ve IIS 7 için - ilk istekte, IIS 7 tümleşik mod için - web uygulamasında, herhangi bir isteğin hemen öncesinde). Bu nedenle, tüm çalışmalarınızı elde etmek için, HttpApplication'ın geçersiz kılındığı Init yönteminde veya iş yapıcısında olay işleyicileri eklemeniz gerekir. Bunları kurucuya eklerseniz - bu işleyiciler önce kayıtlı modüllerin işleyicilerinden önce çağrılır.
Yani kod aşağıdaki gibi görünmelidir:

public class MySmartApp: HttpApplication{ 
    public override void Init(){ 
     this.BeginRequest += new EventHandler(MvcApplication_BeginRequest); 
     this.EndRequest += new EventHandler(MvcApplication_EndRequest); 
    } 
    protected void Application_Start(){ 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 

veya böyle

:

public class MySmartApp: HttpApplication{ 
    public MySmartApp(){ 
     this.BeginRequest += new EventHandler(MvcApplication_BeginRequest); 
     this.EndRequest += new EventHandler(MvcApplication_EndRequest); 
    } 
    protected void Application_Start(){ 
     RegisterRoutes(RouteTable.Routes); 
    } 
} 
+0

Bu büyük bir bilgidir, ancak bu sorunu çözmeyeceğinden şüpheleniyorum. Application_OnStart'a işleyicileri kaydetmeden bu sorunu (sadece, benim için sadece repro'nun reprounu) yeniden deneyebilirim. Bu hatanın gerçekte ne anlama geldiğini anlamak faydalı olacaktır (null). –

+0

Yukarıdaki bilgilerle ilgili bazı bağlantılar sağlayabilir misiniz? Belki bir MSDN makalesi? –

+0

Harika cevap. Benim için problemi çözdüm. Bu .NET 4.5, MVC 4, IIS 8. üzerinde oldu. –

İlgili konular