加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Global.asax.cs事件在网站发布后未触发

发布时间:2020-12-16 07:40:25 所属栏目:asp.Net 来源:网络整理
导读:我一直在网上寻找答案,这几个小时,所以我希望有人可以提供帮助. 我在VS 2010(.Net 4.0框架,C#)中有一个WebSite,它在根目录中有一个Global.asax文件,在App_Code文件夹中有一个Global.asax.cs文件. (请注意,这是一个WebSite,而不是Web应用程序).从我的本地开发
我一直在网上寻找答案,这几个小时,所以我希望有人可以提供帮助.

我在VS 2010(.Net 4.0框架,C#)中有一个WebSite,它在根目录中有一个Global.asax文件,在App_Code文件夹中有一个Global.asax.cs文件. (请注意,这是一个WebSite,而不是Web应用程序).从我的本地开发机器运行此WebSite时,一切都按预期运行 – 更具体地说,Global.asax.cs文件中的Session_Start事件在每个会话开始时触发并运行一些代码以获取用户的登录凭据,这将确定它们的内容允许根据应用程序的安全级别查看/编辑应用程序.

但是,一旦我将此WebSite发布到Windows 2003 R2服务器上,Global.asax.cs文件中的所有事件都不会触发. (只有Session_Start事件中需要代码,但我也将代码放在Application_Start中,只是为了查看它是否会触发 – 它没有).

这是Global.asax代码:

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

这是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. 

    }
}

基于我读过的其他答案/讨论的一些注释:一旦发布,PrecompiledApp.config就会出现在网站的文件夹中.此外,App_global.asax.compiled和App_global.asax.dll出现在bin文件夹中.

任何人都知道问题可能是什么?为什么这可以从我的本地机器上运行,但是一旦它发布到服务器上就不行?是否存在我缺少的IIS设置?

这是我第一次使用asp.net“网站”,所以任何帮助将不胜感激.谢谢.

解决方法

你可以通过不使用global.asax.cs来规避这一点;即删除global.asax.cs并将global.asax修改为

<%@ 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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读