CRM запрашивает учетные данные при добавлении потоков в Silverlight - PullRequest
1 голос
/ 07 июля 2010

У меня есть приложение silverlight, встроенное в IFRAME в Dynamics CRM ... звонки после загрузки формы извлекают данные через мыльный клиент службы CRM. Клиент программно инициализируется с помощью URL-адреса и токена аутентификации CRM, введенного в заголовки.

Все это само по себе прекрасно работает.

Проблема возникла, когда я добавил анимацию "загрузка ...". Чтобы правильно отобразить анимацию, я упорядочил запросы на обслуживание в фоновом потоке, по сути заменив ...

QuestionContext.RetrieveOptions();

... с ...

ThreadPool.QueueUserWorkItem(delegate {
                                QuestionContext.RetrieveOptions();
                             });

В тот момент, когда я это делаю, я (несколько спорадически) получаю приглашение для ввода учетных данных. Отмена запроса приводит к ошибке «Не найдено» веб-службой.

Я поместил файл clientaccesspolicy.xml в корень CRMWeb, корень моего сайта ISV, а также в папку ClientBin, где находится мой .xap ... ни один из них не имеет значения.

ОБНОВЛЕНИЕ: Предоставление действительных учетных данных в приглашении не имеет никакого эффекта, приглашение появляется снова 3 раза, а затем мы возвращаемся к ошибке «Не найдено».

ОБНОВЛЕНИЕ: Я обернул ответы на вызовы службы проверкой ошибок, каждый раз при ошибке «Не найдено» просто повторный запрос. Теперь нажатие кнопки «Отмена» в запросе учетных данных при каждом его представлении в конечном итоге приводит к удовлетворению запросов. То есть он не всегда терпит неудачу, и повторная выдача запроса неопределенное количество раз в конечном итоге приводит к успеху.

Я также добавил Thread.Sleep () перед моим вызовом Execute () для мыльного клиента, чтобы посмотреть, не влияют ли эти вызовы друг на друга, но это, похоже, не имеет значения .

1 Ответ

1 голос
/ 04 марта 2011

Я столкнулся с точно такой же проблемой и, наконец, понял, как ее решить.Ключ в том, чтобы создать клиент CrmService в том же потоке, из которого вы его вызываете.У меня был класс CrmService, который обернул все мои взаимодействия с веб-службой Crm, и в ctor CrmService я создал новую веб-службу Crm.Затем я попытался использовать фоновый рабочий для вызова службы.После того, как я переместил новую веб-службу Crm в тот же поток, что и вызов веб-службы, все работало нормально.

...