2012-03-23 3 views
0

У меня есть код, который я использую как в моем старте, так и в роли «Роль рабочего» и «Веб-роль». В Рабочем коде код вызывается из метода Run(); в роли Web, он называется в Application_Start.Определите роль Azure Web или работника? (Alternate: Определите, работает ли в IIS?)

Я хочу внести небольшие изменения в его поведение в зависимости от того, нахожусь ли я на рабочем месте или в веб-роли. Есть ли способ обнаружить это? Если нет, в качестве альтернативы я могу определить, запущен ли я под IIS?

Обратите внимание, что проверка HttpContext не будет работать, так как я запущен в Application_Start.

+0

Есть ли причина, по которой вы не просто используете метод Run() для вашей сети и рабочей ситуации? Веб-роль - это только роль рабочего с включением IIS; ткань будет по-прежнему вызывать все методы RoleEntryPoint (Azure role lifecycle) на веб-роли. –

+0

@ ChrisJ.T.Auld Run() не запускается в том же AppDomain на полной веб-роли IIS. –

+0

Возможный дубликат [Могу ли я найти тип роли Azure (рабочий или веб-сайт)?] (Http://stackoverflow.com/questions/8877461/can-i-find-azure-role-type-worker-or-web) –

ответ

1

Ну,

Этот вопрос имеет been asked over и снова. Что я могу придумать, использует подход для listing all sites in current role instance (подход ServerManager). Если вызов ServerManager завершается с ошибкой или вообще отсутствуют какие-либо сайты, то вы находитесь в роли рабочего. В противном случае - роль в Интернете. Я думаю, что это самый надежный способ проверить.

Не забывайте, что IIS все еще существует в Ролях Работ (вы можете использовать RDP для любой рабочей роли и увидите, что роль сервера IIS присутствует). Это просто не началось! Таким образом, «Веб-сайт по умолчанию» все еще может быть там (никогда не проверял его!).

+3

«снова и снова», но вы ссылаетесь на один вопрос без принятого ответа. Просто успокойтесь и помогите ассеру решить его проблему, не нужно быть рывком об этом – artfulhacker

0

Это рабочая роль, если «WaWorkerHost» процесс существует, иначе это роль в Интернете. вы также можете проверить «WaIISHost».

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