2010-11-26 53 views
6

我正在從Silverlight Windows Phone 7應用程序中調用Web服務,如果Web服務可用,它可以正常工作。如果Web服務不可用,則會捕獲未處理的異常,但我自己似乎無法捕捉到它。我嘗試如下:Windows Phone 7,silverlight - 如何在調用異步Web服務時捕獲EndpointNotFoundException?

  //Get list of providers from Webservice 
     RSAServiceClient proxy = new RSAServiceClient(); 
     proxy.GetSuppliersCompleted += new System.EventHandler<GetSuppliersCompletedEventArgs>(ProxyGetSuppliersCompleted); 
     try 
     { 
      proxy.GetSuppliersAsync(); 
     } 
     catch (EndpointNotFoundException) 
     { 
      //TODO: Handle webserice not being available 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

但這並不捕獲異常和明顯GetSuppliersCompleted從來沒有得到的叫,所以我不能趕上它。

然後,我認爲我可能能夠通過檢查連接狀態(proxy.State)來檢測它,但是儘管Web服務沒有運行,但會返回CommunicationState.Opened。

任何想法,我可以處理這個?

道歉,如果我錯過了一些東西,但我已經搜索並找不到解決方案。

回答

8

你應該把你的漁獲物放在你的ProxyGetSuppliersCompleted方法中。

試圖訪問結果將拋出您期待的錯誤。

或者在ProxyGetSuppliersCompleted中,您可以測試EventArgs的Error屬性,該屬性將包含該異常。

+1

ProxyGetSuppliersCompleted未被調用,因爲EndpointNotFoundException在Visual Studio生成的Reference.cs中被捕獲爲「未處理」。 – Fishcake 2010-11-26 15:33:01

+2

對不起,我誤解了。因爲在調試Visual Studio時在Reference.cs中發生故障,所以我沒有繼續。如果我繼續執行(或者沒有調試),那麼錯誤確實在ProxyGetSuppliersCompleted中被捕獲。乾杯。 – Fishcake 2010-11-26 15:47:58

+0

感謝細節Fishcake – alexandrekow 2011-06-08 20:28:29

0

我建議您在開啓代碼之前檢查您是否可以訪問Internet。只要檢查是否有網絡連接,並通知用戶,如果沒有。

-1

我有完全相同的問題。 該行爲與處理異常的Desktop-Silverlight不同,在WindowsPhone-Silverlight中根本不處理連接異常。

我創建了一個話題在這裏:http://forums.create.msdn.com/forums/t/69485.aspx

沒有人有任何真正的答案。 嗯,是的,有一個訣竅:你可以手動修改reference.cs以手動捕獲異常....但是如果你有很多功能,它將變成一場噩夢。

也許微軟的開發者沒有測試所有的連接用例,他們忘記實現這個(這是一個很大的)。