2011-06-30 13 views
0

クライアント側でサーバー例外を表示する機能を追加したいとします。Silverlightクライアントでサーバー例外を表示

サーバは、いくつかの例外を得た場合=>私は、例外メッセージが表示されます、クライアント側でいくつかのメッセージボックスを表示したい。..

私はそれをどのように行うことができますか?

答えて

2

まず、詳細なエラー情報を返すには、WCFサービスを有効にする必要があります。セキュリティ上の理由から、デフォルトではオフになっています(エラーメッセージでシステムの詳細を攻撃者に伝えたくない...)

そのためには、新しい<ServiceDebug>行動とのサービスの振る舞い:

<behaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceWithDetailedErrors"> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

第二に、あなたはこの新しいサービスの動作を参照するために、あなたの<service>タグを変更する必要があります。

<service name="YourNamespace.YourServiceClassName" 
     behaviorConfiguration="ServiceWithDetailedErrors"> 
    ...... 
</service> 

そして第三に:あなたはを見てあなたのSLソリューションを適応させる必要がありますエラーの詳細あなたは今戻ってきています。

最後に、この設定は開発やテストに非常に便利ですが、にする必要があります。

0

Marcに言及したことに加えて、恐ろしい一般的な「見つからない」エラーを避けるために、HTTPクライアントスタックに切り替えることも必要です。

bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
0

あなたが障害契約を使用することができ、クライアントにエラーを渡している場合:

は、あなたのサービス契約にこの属性を追加します。

[OperationContract] 
    [FaultContract(typeof(MyCustomException))] 
    void MyServiceMethod(); 

は含む「MyCustomException」のクラスを作成します。クライアントに渡す情報(この場合、exception.ToString()からの例外の完全な詳細)。

その後、あなたのサービスメソッドの実装では、コードの周りのtry/catchを追加します。クライアント側で

public void MyServiceMethod() 
{ 
     try 
     { 
     // Your code here 
     } 
     catch(Exception e) 
     { 
     MyCustomException exception= new MyCustomException(e.ToString()); 
       throw new FaultException<MyCustomException>(exception); 
     } 
} 

をあなたはのtry/catch(FaultExceptionのe)を入れて、あなたが好きしかし、詳細情報を表示することができます。

try 
     { 
      // your call here 
     } 
     catch (FaultException<MyCustomException> faultException) 
     { 
      // general message displayed to user here 
      MessageBox.Show((faultException.Detail as MyCustomException).Details); 
     } 
     catch (Exception) 
     { 
      // display generic message to the user here 
      MessageBox.Show("There was a problem connecting to the server"); 
     } 
関連する問題