1

我有一个 web 项目 (asp.net mvc) 在 windows azure 中部署为 web 角色。对于网络角色,我有一个继承自 RoleEntryPoint 的 WebRole 类。我重写了 OnStart() 方法来初始化一些静态类。

在同一个项目的 RequestHandler (IHttpHandler) 中,我使用这些静态类,但它们没有被初始化——我必须再次在 Global.asax 中初始化它们。我认为它们属于不同的应用领域。

我没有在真正的天蓝色环境中测试过这种行为,只在模拟器中测试过。

有没有办法来解决这个问题?我需要静态类在 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 回答