当我在Silverlight中添加线程时,CRM会提示输入凭据

时间:2010-07-07 14:22:41

标签: silverlight dynamics-crm dynamics-crm-4

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

所有这一切本身都非常好。

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

QuestionContext.RetrieveOptions();

...与......

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

但是,当我这样做的那一刻,我(有点偶尔)获得凭据提示。取消提示会导致Web服务出现“未找到”错误。

我将clientaccesspolicy.xml放在CRMWeb根目录,我的ISV站点根目录以及我的.xap所在的ClientBin文件夹中......没有一个能够产生影响。

更新:在提示中提供有效凭据无效,提示会重新显示3次,然后我们又回到“未找到”错误。

更新:我已经通过一些错误检查包装了服务调用响应,每次“未找到”错误只是重新发出请求。现在,无论何时出现凭证提示中的取消最终都会导致满意的请求。也就是说,它不会一直失败,重新发出请求的次数最多会导致成功。

我还在我的Execute()调用soap客户端之前添加了一个Thread.Sleep(),以查看调用是否以某种方式干扰彼此,但它似乎没有什么区别

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,最后想出了如何解决它。关键是在您调用它的同一个线程上创建CrmService客户端。我有一个CrmService类,它包含了我与Crm Web服务的所有交互,在CrmService中,我创建了新的Crm Web服务。然后我尝试使用后台工作程序对服务进行调用。一旦我将新的Crm Web服务移动到与Web服务上的调用相同的线程,它一切正常。