当我在Silverlight中添加线程时,CRM会提示输入凭据
我有一个Silverlight应用程序嵌入到Dynamics CRM中的IFRAME中...加载表单后调用通过CRM服务soap客户端检索数据。客户端以编程方式初始化,并注入到标头中的URL和CRM身份验证令牌。当我在Silverlight中添加线程时,CRM会提示输入凭据
所有这一切,本身,完美地工作。
当我添加“加载...”动画时出现问题。要正确显示动画,我已经整理了服务请求到后台线程,基本取代...
QuestionContext.RetrieveOptions();
...与...
ThreadPool.QueueUserWorkItem(delegate {
QuestionContext.RetrieveOptions();
});
我这样做的那一刻,不过,我(有点零星)得到一个凭证提示。取消提示会导致Web服务出现“未找到”错误。
我已将clientaccesspolicy.xml放入CRMWeb根目录,我的ISV站点根目录以及我的.xap所在的ClientBin文件夹中......它们都没有什么不同。
UPDATE:在提示符下提供有效的凭据没有任何作用,提示符重新出现3次,然后我们回到“未找到”错误。
更新:我已经用一些错误检查来包装服务调用响应,每次在“未找到”错误时只需重新发出请求。现在,只要显示凭据提示符时按取消最终会导致满意的请求。也就是说,它并不总是失败,并且重复发布请求未指定的次数最终导致成功。
我也在我的Execute()调用soap客户端之前添加了一个Thread.Sleep()以努力查看调用是否以某种方式干扰彼此,但它似乎没有做出区别。
我正面临着完全相同的问题,最后想出了如何解决它。关键是在您调用它的同一线程上创建CrmService客户端。我有一个CrmService类,它封装了我与Crm Web Service的所有交互,并在CrmService ctor中创建了新的Crm Web Service。然后我尝试使用后台工作人员拨打服务电话。一旦我将新的Crm Web服务移动到与Web服务调用相同的线程中,它一切正常。
是的,客户端具有线程关联。我相信这是Silverlight 4中的一个限制。 – PjL 2011-03-04 04:55:28