在Silverlight中添加线程时CRM提示输入凭据

在Silverlight中添加线程时CRM提示输入凭据,silverlight,dynamics-crm,dynamics-crm-4,Silverlight,Dynamics Crm,Dynamics Crm 4,我在Dynamics CRM的IFRAME中嵌入了一个silverlight应用程序。。。加载表单后的调用通过CRM服务soap客户端检索数据。客户端以编程方式初始化,URL和CRM身份验证令牌被注入到头中 所有这些,就其本身而言,都是完美的 当我添加“加载…”动画时,问题出现了。为了正确显示动画,我已将服务请求编组到后台线程,基本上替换了 QuestionContext.RetrieveOptions(); 。。。与 ThreadPool.QueueUserWorkItem(delegate

我在Dynamics CRM的IFRAME中嵌入了一个silverlight应用程序。。。加载表单后的调用通过CRM服务soap客户端检索数据。客户端以编程方式初始化,URL和CRM身份验证令牌被注入到头中

所有这些,就其本身而言,都是完美的

当我添加“加载…”动画时,问题出现了。为了正确显示动画,我已将服务请求编组到后台线程,基本上替换了

QuestionContext.RetrieveOptions();
。。。与

ThreadPool.QueueUserWorkItem(delegate {
                                QuestionContext.RetrieveOptions();
                             });
不过,在我这样做的那一刻,我(偶尔)会收到一个凭证提示。取消提示会导致web服务出现“找不到”错误

我已将clientaccesspolicy.xml放在CRMWeb根目录、我的ISV站点根目录以及我的.xap所在的ClientBin文件夹中。。。他们都没有改变

更新:在提示中提供有效凭据无效,提示重新出现3次,然后返回到“未找到”错误

更新:我用一些错误检查包装了服务调用响应,每次出现“未找到”错误时,只需重新发出请求。现在,每当出现凭证提示时,在凭证提示中按cancel最终会导致满足请求。也就是说,它不会一直失败,重新发出请求的次数不确定最终会导致成功


在对soap客户端进行Execute()调用之前,我还添加了一个Thread.Sleep(),以查看调用是否以某种方式相互干扰,但这似乎没有什么区别。

我遇到了完全相同的问题,并最终找到了解决方法。关键是在调用它的同一线程上创建CrmService客户机。我有一个CrmService类,它封装了我与crmweb服务的所有交互,并在CrmService中创建了新的crmweb服务。然后我尝试使用后台工作人员对服务进行调用。一旦我将新的Crm Web服务移动到与Web服务调用相同的线程,一切都很好。

我面临着完全相同的问题,并最终找到了解决方法。关键是在调用它的同一线程上创建CrmService客户机。我有一个CrmService类,它封装了我与crmweb服务的所有交互,并在CrmService中创建了新的crmweb服务。然后我尝试使用后台工作人员对服务进行调用。一旦我将新的Crm Web服务移动到与Web服务调用相同的线程上,一切都很好。

是的,客户机确实具有线程亲和力。我相信这是Silverlight 4中已经解除的约束。是的,客户机确实具有线程亲和力。我相信这是Silverlight 4中取消的限制。