2009-03-26 9 views
6

.NET Framework(.asmxファイル、WCFではなく)を使用して、WebServicesを使いこなしています。私は、何らかのビジネスエラーがメソッド呼び出しで発生したことをユーザーに伝えるベストプラクティスを考えています。Webサービスでのエラー処理のベストプラクティス

私の小さなテスト・ケース:

私は、中央サーバに登録する必要があるプローブを測定しています。各プローブは異なる物理アドレスを持つ必要があります。登録するには、彼らは(Webサービス経由)を呼び出す必要があります。

[WebMethod] 
public void RegisterReadingStation(out Guid sessionId, Int64 physicalAddress) 

今、署名は石で設定されていません - 実際に、それは私が把握しようとしているものです。 :) 既に取得済みの物理アドレスを使用して自分自身を登録しようとしている場合、何らかの形でプローブに警告する必要があります。

私はそれを見る方法、私はいくつかの可能性だ:

  • が情報を含むthrows SOAPException指定を投げます。しかし、string :: messageはプログラマチックなチェックを行うのは簡単ではありません。
  • 戻り値のパラメータ(またはさらに単純な列挙型)として、ある種のvalue-classを使用します。私がこれを行うと、私は手動でサーバー/クライアント上のクラスを直列化/逆シリアル化しなければならないと思いますか?

これについてのご意見はありますか?

答えて

1

私は共通のコンセンサスはカスタムリターンコード(整数)を使用すると思います。可能なリターンコードが何であるかをサービスが文書化している限り、これは実行可能でなければなりません。

+0

Eek、C-日に戻る。このアプローチの問題は、それほど柔軟性がないということです。スタックトレースやメッセージなどのカスタムエラーメッセージを追加することはできません。これは簡単でマルチ互換の方法であることがわかります。 – cwap

+0

私は、シンプルさの面で間違っているWebサービスに対する評価を得ています。 –

+0

これは最高の投票回答ではありませんが、私はそれを受け入れます。私は "Webサービスは使いやすいはずです"というのが好きなので、これは今のところこんなことです: – cwap

5

各WebMethodからResultSetという小さなクラスを返します。このクラスには、intエラーコードと文字列errormessageが含まれています。

これにより、エラー/成功、および問題が発生した場合の詳細を簡単に確認できます。

WebMethodでデータを返す必要がある場合は、ResultSetから継承して特定のResultSetにデータを含めるようにします。

+0

はい、それは私も同様です:) – cwap

+0

しかし、Webサービス関数は、すべてがうまくいって、エラーが発生したときにemployeeDataのようなオブジェクトを返すと仮定したときに何をすればいいですか?別のシナリオで同じ関数からの異なるオブジェクト? –

+0

私がしたのは、ResultSetから継承したEmployeeDataResultSetという新しいクラスを作成することでした。それから、EmployeeDataクラスであるEmployeeDataResultSetにPropertyを追加しました。 Basciallyでは、EmployeeデータをResultSetにカプセル化します。 – Moose

関連する問題