2009-01-20 120 views
1

我正在通過他創建的一些Web服務(主要涉及LINQ to SQL)訪問SQL Server(2008 Express)的網站上使用另一個編碼器,UI是在Silverlight中。我一直在研究系統的另一部分,但剛剛得到他最新的代碼,並試圖在我的機器上運行它,但遇到了錯誤。CommunicationException從Silverlight應用程序調用的Web服務的異步回調

這是在reference.cs文件中的一個行的CommunicationException,該Web服務的EndXXX方法:

// This is for a Ping method we created just to trouble shoot- it behaves the same. 
public string EndPing(System.IAsyncResult result) { 

    object[] _args = new object[0]; 

    // Next line throws Communication Exception 
    string _result = ((string)(base.EndInvoke("Ping", _args, result))); 
    return _result; 
} 

的錯誤信息是:試圖讓

「時發生錯誤對URI'http://localhost:1233/SummitService.svc'的請求,這可能是因爲嘗試以跨域方式訪問服務而沒有適當的跨域策略或者不適合SOAP服務的策略您可能需要聯繫該服務的所有者發佈跨域策略文件並確保它允許發送與SOAP相關的HTTP頭。 「

整個堆棧在我的本地機器上,所以我不應該需要進行任何跨域調用。我們查看了所有可以找到的配置代碼(web .config,ServiceReferences.ClientConfig),將所有對他的機器的引用都改爲我的。對於所有這些技術我們都很新,所以我們已經運行到了我們的知識末端。鐘聲任何人?


UPDATE

所以我做了一些故障排除,發現如果我輸入啓動整個事件的aspx頁面的localhost地址,它會正常加載,並且我在頁面上看到來自webservice的數據。只有當我調試時,我得到這個錯誤。

我還注意到,當我嘗試和調試頁面時,它正在將文件位置 - D:\ projects \ etc - 加載到瀏覽器中,而不是通過本地主機。它實際上是加載項目中的.html測試頁面,即使我已經將.aspx頁面設置爲起始頁面。

所以它看起來與項目設置或VS2008設置有關,而不是像我第一次假設的配置問題。有沒有人有任何其他建議?

回答

1

好的,所以我覺得有點傻。

在我連續幾天反對這件事情之後,我發現我已經將Silverlight項目設置爲啓動項目。我需要它是實際上具有用於連接到數據庫的適當身份驗證設置的Web項目 - 更不用說實際的主機.aspx頁面,我一直將其設置爲起始頁面,並且想知道爲什麼它沒有被使用。

只要我設置正確的項目。一切都很美麗。

0

這個問題可能與LINQ序列化查詢結果的方式有關。如果它檢測到表之間的關係,那麼它將它們與服務中的數據一起發送給它們,但由於Silverlight被沙箱化,它不能接受任何「分支」數據。

在LINQ設計器中,嘗試將序列化模式更改爲單向並查看是否有效。

+0

感謝您的建議。我試過了,但沒有運氣。說實話,雖然我提供了所有用於完整性的技術,但「Ping」Web服務(它只是返回一個字符串文本)具有相同的問題,這讓我認爲這對服務來說很簡單。希望我知道什麼! – TwainJ 2009-01-22 19:08:52

0

我想在你測試web項目的地方添加silverlight項目,你已經定義了每次創建項目時創建一個測試頁面。首先取消選中該選項。