2012-04-26 73 views
0

是否可以從Silverlight訪問Rally的SOAP服務?我能夠從桌面應用程序中的.NET 2.0代理訪問服務,但不能通過Silverlight中的WCF客戶端代理訪問服務。我得到以下異常熟悉,從Silverlight訪問Rally SOAP服務

System.ServiceModel.CommunicationException: 發生錯誤而 嘗試連接到URI請求....這可能是由於試圖 在交叉訪問服務沒有適當的 跨域策略的域名方式,或者不適合SOAP 服務的策略。您可能需要聯繫服務的所有者以發佈跨域策略文件並確保它允許發送與SOAP相關的HTTP 頭文件。此錯誤也可能是由於在Web服務代理中使用內部 類型而不使用 InternalsVisibleToAttribute特性。有關更多詳細信息,請參閱內部例外 。

我相信這個問題是由於試圖從Silverlight發出一個跨域請求,而這需要在服務器上安裝一個跨域策略文件。如果是這種情況,爲什麼桌面應用程序不需要這樣的策略?

回答

0

我不是Silverlight專家,但這看起來像是Silverlight強加的跨域腳本/安全沙箱,以確保Silverlight客戶端不會向除他們所在的服務器/主機以外的站點發出請求下載,除非Silverlight客戶端被服務提供商/ devloper特別授予了該權限。在上面的錯誤消息:

「您可能需要聯繫服務的業主發佈跨域策略文件,並確保它允許發送SOAP有關的HTTP標頭。」

我想「的服務業主」是指Silverlight的主機的主人,而不是「外部」 Web服務(在這種情況下,拉力賽)。

桌面和/或控制檯應用程序不會有這種相同的沙盒限制。您可能會遇到同樣的問題,試圖通過Silverlight客戶端訪問其他供應商的Web服務。

您可能會發現這個特定的Silverlight的螺紋:

Cross Domain Policy

利於如何設置的細節和你的服務器上配置一個Silverlight跨域策略文件。

0

的Silverlight是在考慮安全性。這意味着來自Silverlight應用程序的跨站點腳本默認關閉,並且必須根據具體情況啓用。另一方面,.NET桌面應用程序通常具有更高的安全權限,可以調用任何Web服務,COM對象和本機API。

您解決此問題在Silverlight的方法是在服務器上創建一個服務。 Silverlight客戶端代碼調用您的服務器端服務,然後調用第三方Web服務。服務器端服務可以下注.NET,Java等等。 Web服務器通常可以調用他們喜歡的任何東西 - 解決問題

+0

感謝您的回覆。我考慮過這種方法,但是設法通過在Silverlight 5中使用提升的信任來解決它。 – 2012-04-27 00:17:48

+0

是的,這是解決它的另一種方式:在您的應用程序中激發一堆權限。 :)如果您不需要在瀏覽器中運行,則可能更容易從瀏覽器應用程序中獲得較高的信任。區別在於瀏覽器中的提升信任的東西看起來像你必須簽署你的應用程序的一切工作。哪一個更容易取決於你的情況和組織。 – 2012-04-27 18:06:48

0

通過使用在Silverlight 5.可用的擴展權限特徵由於XAP部署內部互聯網上,這一解決方案是可以接受的解決這個自己。