1

Global.asaxにカスタムエラー例外を追加します。デバッグモードでは機能しますが、IIS 7.0で公開すると、機能しません。Global.asax:

  void Application_Error(object sender, EventArgs e)
    {
    // Code that runs when an unhandled error occurs
        //Ramezani V4.5: Change0002 29-08-91        
        if (Context.AllErrors[0].InnerException != null)
        {
            try
            {
                bool IsValid = (Session["ExceptionHandler"] == null);
                ArisFramWork.ExceptionHandler handler = new ArisFramWork.ExceptionHandler(Request.AppRelativeCurrentExecutionFilePath, (Context.AllErrors[0] == null ? new Exception("No Error Found") : Context.AllErrors[0]));
                Session["ExceptionHandler"] = handler;
                string redirectURL = (IsValid ? Request.AppRelativeCurrentExecutionFilePath : "~/ExceptionHandler.aspx");
                Response.Redirect((Request.QueryString.Count == 0 ? redirectURL : redirectURL + "?" + Request.QueryString.ToString()));    
            }
            catch
            {
                Session["ExceptionHandler"] = null;
            }
        }
        else
        {
            Response.Redirect("~/FileAccess.aspx");
        }
    }
 void Application_Start(object sender, EventArgs e)
    {
        FastReport.Utils.Config.WebMode = true;
        // Code that runs on application startup
        //Ramezani V4.5: Change0002 29-08-91       
        //if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)       
            Session["ExceptionHandler"] = null;
    }

ExceptionHandler.aspxの場合:

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            publicclass.MessageBox("Hello ExceptionHandler", this);
            if (Session["ExceptionHandler"] != null)
            {
                if(ExceptionHandlerBulletedList.Items.Count==1)
                    ExceptionHandlerBulletedList.Items.RemoveAt(0);
                List<ArisFramWork.ExceptionHandler> ExecutionCollection = (List<ArisFramWork.ExceptionHandler>)Session["ExceptionHandler"];
                if (ExecutionCollection.Count < 1)
                {
                    Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "CloseForm", "window.close();", true);
                    return;
                }       
                .....
                Session["ExceptionHandler"] = null;
            }
        }
        catch (Exception exception)
        {
            Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "CloseForm", "window.close();", true);
        }
    }

Visual Studio 2010を介してデバッグモードでWebサイトを実行すると、機能しますが、公開モードでExceptionHandler.asaxにリダイレクトされません。

4

1 に答える 1

0

これは、global.asaxファイルが公開されていないためです。そのファイルを公開フォルダーに手動でコピーします。

これがWebアプリケーションプロジェクトの場合は、global.asaxファイルのプロパティをcontentに設定できます。残念ながら、それがWebサイトの場合は、手動で行う必要があります。

global.asaxを公開リストに含める方法についてはまだ頭を悩ませています。まだ答えはありません。

global.asaxはローカルコンピューターで動作しますが、サーバーに公開した後は動作しません

于 2013-02-02T14:40:59.120 に答える