确定Azure Web或Worker角色? (备用:确定是否在IIS中运行?)

时间:2012-03-23 19:45:55

标签: c# azure environment azure-worker-roles azure-web-roles

我有一些我在Worker Role和Web Role启动代码中使用的代码。在Worker中,代码是从Run()方法调用的;在Web角色中,它在Application_Start中调用。

我希望对其行为稍作修改,具体取决于我是在工作角色还是网络角色。有没有办法检测到这个?如果没有,或者我可以检测我是否在IIS下运行?

请注意,由于我在HttpContext中运行,因此检查Application_Start将无效。

2 个答案:

答案 0 :(得分:1)

那么,

这个问题有been asked over一遍又一遍。我能想到的是使用listing all sites in current role instance(ServerManager方法)的方法。如果对ServerManager的调用失败,或者根本没有站点,那么您将处于辅助角色。否则 - 网络角色。我认为这是最可靠的检查方式。

不要忘记IIS仍然存在于工作者角色中(您可以RDP到任何工作者角色,并且将看到存在IIS服务器角色)。它还没开始!因此,“默认网站”可能仍在那里(从未检查过那个!)。

答案 1 :(得分:0)

如果存在" WaWorkerHost" 进程,则为工作者角色,否则为web角色。你也可以检查" WaIISHost"

    bool isWorkerRole = false;
    foreach (Process proc in Process.GetProcessesByName("WaWorkerHost"))
    {
        isWorkerRole = true;
    }