2010-07-07 86 views
1

我有一个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()以努力查看调用是否以某种方式干扰彼此,但它似乎没有做出区别。

回答

1

我正面临着完全相同的问题,最后想出了如何解决它。关键是在您调用它的同一线程上创建CrmService客户端。我有一个CrmService类,它封装了我与Crm Web Service的所有交互,并在CrmService ctor中创建了新的Crm Web Service。然后我尝试使用后台工作人员拨打服务电话。一旦我将新的Crm Web服务移动到与Web服务调用相同的线程中,它一切正常。

+0

是的,客户端具有线程关联。我相信这是Silverlight 4中的一个限制。 – PjL 2011-03-04 04:55:28

相关问题