Мне нужно на лету изменить некоторые параметры конфигурации в проекте Windows Azure - и их нужно изменить с помощью вызова веб-службы (обновление конфигурации приложения либо через API платформы, либо с сайта управления Azure не выполняется).вариант здесь).
Проект имеет несколько веб-ролей и рабочих ролей - все они должны знать о новой конфигурации при ее изменении.
Конфигурация сохраняется в долговременном хранилище и также кэшируется во времявремя выполнения в статической переменной.
Мое решение состояло в том, чтобы создать внутреннюю (tcp) конечную точку для моих ролей и использовать ее для циклического прохождения всех ролей и экземпляров в этих ролях, создания клиента на лету и рассказывания экземпляру оновая настройка.(в значительной степени совпадает с: http://msdn.microsoft.com/en-us/gg457891)
Сначала я запустил ServiceHost в RoleEntryPoint WebRole ... и я был озадачен, почему все работало нормально, когда я проходил через коммуникации (статические переменные, гдеустанавливается правильно) - тем не менее, когда я выполнял другие вызовы веб-службы, статическая переменная, казалось, «забыла» то, что я установил.
Это имело место как локально, так и в промежуточной среде Azure.
В этот момент я понял, что, поскольку мы используем режим полного IIS, RoleEntryPoint и веб-службы выполнялись в двух отдельных процессах - один в заглушке Azure и один в IIS.
«Не проблема», - сказал я. Я просто перенесу строку кода, которая запускает ServiceHost, из моего RoleEntryPoint в global.asax - после чего ServiceHost будет запущен в том же процессе, что и остальная часть сайта.- и статические переменные будут такими же.
Вот где у меня проблема;отлично работает на моей локальной машине, работающей в среде разработчика.Как только я выполняю развертывание, я начинаю получать сообщения об ошибках, в которых говорится, что канал, используемый для подключения к службе, не может быть закрыт, потому что он находится в "неисправном состоянии".
Вопрос:
- Чем отличается среда Azure vs. Dev от этой причины?
- Как устранить или обойти проблему?
- Есть ли у кого-нибудь общие рекомендации о том, как мне следует получитьболее описательная ошибка ... мне нужно включить полную диагностику wcf в Azure, чтобы получить это, или есть какой-то другой способ получить подробности об исключении?
Последующее наблюдение:
С помощью удаленного рабочего стола я узнал несколько интересных вещей:
Активация без HTTP не устанавливается по умолчанию в Azure WebRoles.Я считаю, что это можно преодолеть с помощью сценария запуска:
start / w pkgmgr / iu: WCF-NonHTTP-Activation;
Сайт, созданный в IIS через ИнтернетВ роли не включен протокол net.tcp по умолчанию.Я также считаю, что это можно преодолеть с помощью сценария запуска:
% systemroot% \ system32 \ inetsrv \ appcmd.exe установить приложение "Имя сайта здесь" /enabledProtocols:https,http,net.tcp
У меня не было времени, чтобы принять это полностью, поскольку сроки заставили меня временно применить некоторые обходные пути.
Некоторые полезные ссылки, связанные с этой темой:
http://msdn.microsoft.com/en-us/magazine/cc163357.aspx
http://forums.iis.net/t/1160443.aspx
http://msdn.microsoft.com/en-us/library/ms731053.aspx
http://labs.episerver.com/en/Blogs/Paul-Smith/Dates/2008/6/Hosting-non-HTTP-based-WCF-applications-in-IIS7/