C# 确定Azure Web或工作人员角色?(备选:确定是否在IIS中运行?)
我在我的工作者角色和Web角色启动代码中都使用了一些代码。在Worker中,从C# 确定Azure Web或工作人员角色?(备选:确定是否在IIS中运行?),c#,azure,environment,azure-worker-roles,azure-web-roles,C#,Azure,Environment,Azure Worker Roles,Azure Web Roles,我在我的工作者角色和Web角色启动代码中都使用了一些代码。在Worker中,从Run()方法调用代码;在Web角色中,它在Application\u Start中调用 我想根据我是工作人员还是web角色,对其行为进行轻微更改。有没有办法检测到这一点?如果不是,我是否可以检测我是否在IIS下运行 请注意,检查HttpContext将不起作用,因为我正在应用程序\u Start中运行 这个问题反复出现。我能想到的是,使用服务器管理器方法。如果对ServerManager的调用失败,或者根本没有站点,
Run()
方法调用代码;在Web角色中,它在Application\u Start
中调用
我想根据我是工作人员还是web角色,对其行为进行轻微更改。有没有办法检测到这一点?如果不是,我是否可以检测我是否在IIS下运行
请注意,检查HttpContext
将不起作用,因为我正在应用程序\u Start
中运行
这个问题反复出现。我能想到的是,使用服务器管理器方法。如果对ServerManager的调用失败,或者根本没有站点,则您将担任辅助角色。否则-web角色。我认为这是最可靠的检查方法
不要忘记IIS仍然存在于工作角色中(您可以RDP到任何工作角色,并将看到IIS服务器角色存在)。还没开始呢!因此,“默认网站”可能仍然存在(从未选中过该网站!)。如果“WaWorkerHost”进程存在,则为工作者角色,否则为Web角色。您也可以改为选中“WAISHOST”
bool isWorkerRole = false;
foreach (Process proc in Process.GetProcessesByName("WaWorkerHost"))
{
isWorkerRole = true;
}
有没有理由不在web和工作环境中都使用Run()方法?web角色只是IIS打开时的工作角色;fabric仍将调用web角色上的所有RoleEntryPoint(Azure角色生命周期)方法。@ChrisJ.T.Auld Run()不在完整IIS web角色的同一AppDomain中运行。可能重复“一遍又一遍”,但您链接到一个没有接受答案的问题。。只要冷静下来,帮助提问者解决他的问题,就不必为此发火