我有一些我在Worker Role和Web Role启动代码中使用的代码。在Worker中,代码是从Run()
方法调用的;在Web角色中,它在Application_Start
中调用。
我希望对其行为稍作修改,具体取决于我是在工作角色还是网络角色。有没有办法检测到这个?如果没有,或者我可以检测我是否在IIS下运行?
请注意,由于我在HttpContext
中运行,因此检查Application_Start
将无效。
答案 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;
}