вторник, 15 июля 2014 г.

Azure : Проблемы с конфигурацией WebRole

Обычно при использовании WebRole вся настройка инстанса производится из Application_Start метода, однако если Вам понадобилось добавить какую-то логику в саму WebRole, то Вас могут ждать неприятности.

Самый простой пример, Вам понадобилось добавить логов в классе WebRole. Вы взяли любимый NLog и раскидали логирование по классу. В этом случае Вы скорее всего не увидите логов там, где они должны были появиться.
Другой пример, в классе WebRole используется какая-то сущность, для работы которой необходим BindingRedirect. В этом случае все будет намного заметнее - инстанс просто не будет стартовать. Причина в обоих случаях одна и таже, а главное уже известная - класс WebRole запускается в отдельном процессе, в котором не доступен web.config. Поэтому настройка NLog'а, BindingRedirect и все остальное, что настраивается через web.config просто не будет работать в WebRole.

Элегантного решения в этой ситуации пока нет. VS не позволяет переименовывать линки на файлы. Да и сделать линк на файл в том же проекте можно только ручным вмешательством в xml файл проекта. Создание app.config работает только локально - в пакет для деплоя в Azure конфиг не попадает. Так что остается только создать конфиг с именем <WebRoleName>.dll.config (выставив Copy to Output Directory например в Copy always) и поддерживать 2 конфига в проекте [-_\.] да и не совсем ясно, сможет ли package manager поддерживать binding redirect в новом конфиге. Пока я не видел, чтобы он что-то в нем обновлял.

Комментариев нет: