WebRole和HttpHandler中的不同AppDomain

时间:2013-01-06 22:12:30

标签: .net azure

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

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

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

有没有办法解决这个问题?我需要静态类来在WebRole类和请求处理程序之间共享数据。

由于

1 个答案:

答案 0 :(得分:1)

WebRole.cs运行的过程与实际的Web应用程序不同(解释here):

enter image description here

如果您希望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();
    }
}