2010-07-07 31 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

相關問題