2010-11-26 4 views
6

私は、Webサービスが利用可能な場合にうまく動作するSilverlight Windows phone 7アプリケーション内から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

+2

申し訳ありませんが私は誤解しました。 Visual Studioのデバッグ中にReference.csが壊れていたので、私は続けていませんでした。実行を続行する(またはデバッグしない)場合、エラーはProxyGetSuppliersCompletedに実際に捕捉されます。乾杯。 – Fishcake

+0

詳細Fishcake – alexandrekow

0

コードの平和を発射する前に、インターネットにアクセスできるかどうかを確認することをおすすめします。ネット接続があるかどうかを確認し、そうでない場合はユーザに通知してください。

+0

のためにありがとうしかし、それは私の問題を解決していないでしょう。 – Fishcake

-1

私は全く同じ問題を抱えています。 例外は処理されるDesktop-Silverlightとは異なり、接続例外は一切処理されないWindowsPhone-Silverlightとは異なります。

私はここで話題を作成しました:http://forums.create.msdn.com/forums/t/69485.aspx

誰もが任意の本当の答えを持っていません。 ああ、はい、トリックがあります:あなたは手作業で例外を捕まえるためにreference.csを手動で変更することができます....しかし、あなたが多くの機能を持っているなら、それは悪夢になります。

マイクロソフトの開発者は、すべての接続の使用状況をテストしていない可能性があります。これは大きなものです。

+0

asyncメソッドのハンドラでエラーを捕捉できます(私の例ではProxyGetSuppliersCompleted)。これはうまくいきます、あなたはまだ何の問題がありますか? – Fishcake

関連する問題