Рабочая роль базы данных документов Azure

У меня возникают проблемы с получением библиотеки Microsoft.Azure.Documents для инициализации клиента в рабочей роли Azure. Я использую предварительную версию пакета Nuget 0.9.1.

Я воспроизвел то, что было сделано в пример для лазурного документа

При локальном запуске через эмулятор я могу нормально подключиться к documentdb, и он работает, как и ожидалось. При работе в рабочей роли я получаю серию NullReferenceException, а затем ArgumentNullException.

введите здесь описание изображения

Нижнее исключение System.NullReferenceException, выделенное выше, имеет этот стек вызовов введите здесь описание изображения

поэтому исключения nullReferenceException начинаются в этом вызове с нового DocumentClient.

var endpoint = "myendpoint";
var authKey = "myauthkey";
var enpointUri = new Uri(endpoint);
DocumentClient client = new DocumentClient(endpointUri, authKey);

Ничто не меняется между запуском его локально и рабочей ролью, кроме среды (очевидно).

Кто-нибудь заставил DocumentDb работать с рабочей ролью или у кого-нибудь есть идеи, почему он будет генерировать исключения с нулевой ссылкой? Параметры, передаваемые в DocumentClient(), заполняются.

ОБНОВЛЕНИЕ: я попытался переписать его, сделав его более общим, что помогло, по крайней мере, разрешить запуск рабочей роли и подключить отладчик. Он выдает ошибку в новом DocumentClient. Похоже, что некоторая передача безопасности является нулевой. Оба обязательных параметра при инициализации не равны нулю. Есть ли параметр безопасности, который мне нужно изменить, чтобы моя рабочая роль могла подключаться к моей базе данных документов? (до сих пор работает локально нормально)

ОБНОВЛЕНИЕ 2: я могу запустить экземпляр в режиме выпуска, но не в режиме отладки. Значит, это должно быть как-то связано с неправильно настроенными настройками безопасности или хранилища?

Кажется, я получаю System.Security.SecurityExceptions - только при использовании DocumentDb - очереди не дают мне эту ошибку. Все стеки вызовов для этой ошибки, по-видимому, связаны с System.Diagnostics.EventLog. Самое первое исключение, которое я вижу в сводке Intellitrace, — это System.Threading.WaitHandleCannotBeOpenedException.

Подробнее Сводные данные об исключениях Intellitrace: введите здесь описание изображениявведите здесь описание изображения

top — самый ранний, а нижний — самый последний (поэтому сначала происходит System.Security.SecurityException, а затем NullReference)


person GUID_33    schedule 04.12.2014    source источник
comment
где вы пытаетесь запустить DocumentClient? В OnStart, RunAsync в цикле? также, где хранятся ваши настройки конфигурации? если вы выполняете развертывание в Azure, убедитесь, что параметры конфигурации указаны в правильном файле cscfg (т. е. не в app.config).   -  person Ryan CrawCour    schedule 05.12.2014


Ответы (2)


Для меня решение избавиться от исключения безопасности и исключения нулевой ссылки состояло в том, чтобы отключить интеллектуальную трассировку. Как только я это сделал, я смог развернуть и подключить отладчик и увидеть, что все работает.

Не уверен, что находится между нулем в intellitrace и DocumentClient, но, надеюсь, это связано только с nuget, и это будет исправлено в следующей итерации.

person GUID_33    schedule 10.12.2014
comment
Это исправило это для меня, все еще проблема 6 месяцев спустя :( - person Tim Gabrhel; 05.06.2015

не в состоянии воспроизвести.

Я создал новую рабочую роль. Единственный экземпляр. Добавлена ​​конфигурация authkey и endoint в cscfg.

Создан частный статический DocumentClient на уровне класса WorkerRole.

Инициировать DocumentClient в OnStart Утилизировать DocumentClient в OnStop

Во внутреннем цикле RunAsync выполните запрос. Работает, как ожидалось.

Тест в эмуляторе работает. Развернуто как слот Release to Production. работает. Развернуто как отладка для промежуточной установки с помощью удаленной отладки. работает. Прикрепленный VS к CloudService, точка останова попала внутрь цикла.

Рабочее решение: http://ryancrawcour.blob.core.windows.net/samples/AzureCloudService1.zip

person Ryan CrawCour    schedule 05.12.2014
comment
Это странно, я все еще получаю такое же поведение с вашим решением. Все, что я делаю, это меняю Endpoint и AuthKey, а затем запускаю его локально - все работает нормально. Затем разверните его на промежуточной стадии, и роль сообщит о неработоспособности, снова выбрасывая System.Null. Конечная точка и ключ аутентификации, которые вы использовали, были взяты из панели Keys в documentdb на новом портале portal.azure.com, верно? Я попробую начать с новой рабочей роли и посмотрю, не нарушилось ли что-то во всех моих тестах. - person GUID_33; 05.12.2014
comment
Я также только что хотел упомянуть, что я могу заставить очереди работать в этой рабочей роли, так что это должно быть что-то с моей настройкой, будь то безопасность или что-то еще при публикации. - person GUID_33; 05.12.2014
comment
Ага. Я вообще ничего сверхъестественного не делал. это действительно странно, почему он терпит неудачу только в отладке. - person Ryan CrawCour; 06.12.2014
comment
фиксируете ли вы какие-либо счетчики Diagnostics, Intellitrace, Perf в роли? - person Ryan CrawCour; 06.12.2014
comment
У меня есть данные Intellitrace. По сути, я снова взял новый проект и начал заново, добавил хранилище nuget; сделал клиент, как у вас было; ключ и ури есть; а потом развернули к нездоровым. Я снова обновлю вопрос с помощью intellitrace с 2 скриншотами. Я в недоумении, так как это, кажется, просто моя установка. я собираюсь попробовать другой компьютер и посмотреть, есть ли у этой визуальной студии какие-то проблемы. - person GUID_33; 06.12.2014
comment
Итак, попробовав другой компьютер и попробовав разные вещи. Оказывается, когда я включаю intellitrace, рабочая роль становится неработоспособной. Если я просто выполняю удаленную отладку, все работает нормально, и ваш пример работает, и я вижу свои базы данных. Не могли бы вы попробовать включить интеллектуальную трассировку и посмотреть, не станет ли она неработоспособной? Единственное изменение — включить интеллектуальную трассировку в дополнительных настройках. - person GUID_33; 08.12.2014
comment
это интересно. Интересно, это общая проблема с рабочими ролями и Intellitrace? Я посмотрю. - person Ryan CrawCour; 02.03.2015