2013-03-13 19 views
5

Szukałem w Internecie odpowiedzi na to przez wiele godzin, więc mam nadzieję, że ktoś tu może pomóc.Zdarzenia Global.asax.cs nie są uruchamiane po opublikowaniu strony internetowej

Mam WebSite w VS 2010 (.Net 4.0 framework, C#), który ma plik Global.asax w katalogu głównym i plik Global.asax.cs w folderze App_Code. (Należy pamiętać, że jest to witryna internetowa, a nie aplikacja internetowa). Podczas uruchamiania tego WebSite z mojego lokalnego komputera programistycznego wszystko działa zgodnie z oczekiwaniami - w szczególności zdarzenie Session_Start w pliku Global.asax.cs uruchamia pewien kod na początku każdej sesji, aby uzyskać poświadczenia logowania użytkownika, które określają, mogą być wyświetlane/edytowane w aplikacji na podstawie ich poziomu bezpieczeństwa.

Jednak po opublikowaniu tego WebSite na serwerze Windows 2003 R2, żadne zdarzenie w pliku Global.asax.cs nie zostanie wywołane. (Tylko zdarzenie Session_Start wymaga kodu, ale wstawiam również kod w Application_Start, aby sprawdzić, czy uruchomi się - nie zrobił tego).

Oto kod Global.asax:

<%@ Application CodeBehind="~\App_Code\Global.asax.cs" Inherits="Global" Language="C#" %> 

Oto kod Global.asax.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

/// <summary> 
/// Summary description for Global 
/// </summary> 
public partial class Global : System.Web.HttpApplication 
{ 

    public Global() 
    { 

    // TODO: Add constructor logic here 

    } 

    protected void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 
    } 

    protected void Application_End(object sender, EventArgs e) 
    { 
     // Code that runs on application shutdown 
    } 

    protected void Application_Error(object sender, EventArgs e) 
    { 
     // Code that runs when an unhandled error occurs 

    } 

    void Session_Start(object sender, EventArgs e) 
    { 
     try 
     { 
      Session["SessionSink"] = new SessionSink();    
      this.GetUserName();        
     } 
     catch (Exception ex) 
     { 
      string msg = "An error occurred in Global.asax::Session_Start"; 
      ExceptionWriter ew = new ExceptionWriter(); 
      ew.LogError(msg, ex); 
     } 
    } 

    void Session_End(object sender, EventArgs e) 
    { 
     // Code that runs when a session ends. 

    } 
} 

Kilka uwag na podstawie innych odpowiedzi/Dyskusje czytałem: Po opublikowaniu Plik PrecompiledApp.config pojawia się w folderze witryny. Ponadto plik App_global.asax.compiled i App_global.asax.dll pojawią się w folderze bin.

Ktoś ma pojęcie, jaki może być problem? Dlaczego działa to na moim komputerze lokalnym, ale nie po opublikowaniu na serwerze? Czy brakuje mi ustawień IIS?

To jest mój pierwszy raz za pomocą strony internetowej asp.net, więc każda pomoc będzie mile widziane. Dzięki.

+0

co się dzieje, gdy u trzymać obie .CS i .aspx pliku w folderze głównym, a następnie opublikować? próbowałeś? nadal to samo zachowanie? –

+0

@Aarar Anis - tak, gdy umieściłem pliki global.asax i global.asax.cs w katalogu głównym (a następnie będę musiał zmienić CodeBehind na CodeFile w pliku global.asax), to samo zachowanie będzie nadal występować. Działa na moim komputerze lokalnym, ale nie na serwerze. – user2163572

+0

to jest dziwne .. aby usunąć moje wątpliwości, możesz zmienić swojego dyrektora z CodeBehind = "~ \ App_Code \ Global.asax.cs". zamień "\" na "/" –

Odpowiedz

0

Można tego uniknąć, nie używając pliku global.asax.cs; tj usuwać Global.asax.cs i modyfikować Global.asax do

<%@ Application Language="C#" Inherits="System.Web.HttpApplication" %> 
<script runat="server"> 
    public override void Init() { 
    base.Init(); 
    var module = (SessionStateModule)Modules["Session"]; 
    module.Start += new EventHandler((sender, args) => { 
     // create session sink here 
    }); 
    } 
</script> 
Powiązane problemy