1

Windows azure に Web ロールとしてデプロイされた Web プロジェクト (asp.net mvc) があります。Web ロールの場合、RoleEntryPoint から継承する WebRole クラスがあります。OnStart() メソッドをオーバーライドして、いくつかの静的クラスを初期化しました。

同じプロジェクトの RequestHandler (IHttpHandler) でこれらの静的クラスを使用していますが、初期化されていません。Global.asax で再度初期化する必要があります。それらは異なるアプリケーションドメインにあると思います。

この動作は、実際の Azure 環境ではテストしておらず、エミュレーターでのみテストしています。

これを修正する方法はありますか?WebRole クラスとリクエスト ハンドラーの間でデータを共有するには、静的クラスが必要です。

ありがとう

4

1 に答える 1

1

WebRole.cs は、実際の Web アプリケーションとは異なるプロセスで実行されます (ここで説明されています)。

ここに画像の説明を入力

Web アプリケーションで静的クラスを使用する場合は、Global.asax を使用する必要があります。コードを複製したくない場合は、次のように、静的プロパティを別のクラスに格納し、WebRole.cs と Global.asax の両方で初期化することを検討してください。

public static class MyStaticThingie
{
    public static string XmlContentThingie { get; private set; }
    public static Container IoCContainer { get; private set; }

    public static void Init()
    {
        IoCContainer = ...;
        XmlContentThingie = File.ReadAllText("Somefile.xml");
    }
}

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        MyStaticThingie.Init();

        var something = MyStaticThingie.IoCContainer.GetSomething();
        something.DoSomething();

        return base.OnStart();
    }
}

public class Global : System.Web.HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        MyStaticThingie.Init();
    }
}
于 2013-01-07T10:51:51.143 に答える