5

私はこれに対する答えを何時間もオンラインで探していたので、ここの誰かが助けてくれることを願っています.

ルート ディレクトリに Global.asax ファイルがあり、App_Code フォルダーに Global.asax.cs ファイルがある VS 2010 (.Net 4.0 フレームワーク、C#) の Web サイトがあります。(これは Web アプリケーションではなく、Web サイトであることに注意してください)。この Web サイトをローカル開発マシンから実行すると、すべてが期待どおりに実行されます。具体的には、Global.asax.cs ファイルの Session_Start イベントが発生し、すべてのセッションの開始時にいくつかのコードを実行して、ユーザーのログオン資格情報を取得します。セキュリティ レベルに基づいて、アプリケーションでの表示/編集が許可されます。

しかし、この Web サイトを Windows 2003 R2 サーバーに公開すると、Global.asax.cs ファイル内のイベントは発生しません。(Session_Start イベントだけがコードを必要としていましたが、Application_Start にもコードを入れました。それが起動するかどうかを確認するためだけでした。起動しませんでした)。

Global.asax コードは次のとおりです。

<%@ Application CodeBehind="~\App_Code\Global.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 DOES が Web サイトのフォルダーに表示されます。さらに、bin フォルダーに App_global.asax.compiled と App_global.asax.dll が表示されます。

誰でも問題が何であるか考えていますか? これがローカル マシンから機能するのに、サーバーに公開されると機能しないのはなぜですか? 不足している IIS 設定はありますか?

asp.netの「Webサイト」を使用するのはこれが初めてなので、助けていただければ幸いです。ありがとう。

4

1 に答える 1

0

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>
于 2014-05-20T13:21:52.547 に答える