2008-09-16 14 views
1

私はこのthreadを読んだことがあります.WCFには、カスタムフォルトコードやものが組み込まれています。エラーコードまたは例外 - ASP.Net Webサービスのベストプラクティスですか?

しかし、ASP.Net Webサービスのベストプラクティスは何ですか。例外をスローして、クライアントが例外を処理するようにするか、クライアントが処理を行うために使用するエラーコード(成功、失敗など)を送信しますか?

更新:SOAPの場合にさらに議論するために、クライアントは通知メッセージ(返り値は期待されない)と思われるwebsvc呼び出しを行い、すべてがスムーズになり、svcによって例外がスローされないとしましょう。

ここで、通信とネットワークの問題やサーバーとクライアントの間で通知呼び出しが失われたかどうかをクライアントはどのように知るでしょうか?例外をスローしなかった場合と比較してください。クライアントはそれが成功であると想定するかもしれません。しかし、そうではありません。コールはどこかで失われました。 「成功」エラーコードを送信すると、コールがスムーズになることがクライアントに保証されますか?これを達成するための他の方法はありますか?または上記のシナリオも可能ですか?

答えて

2

ジェフアトウッドは、この件について少し前に投稿しました。an interesting aerticle .NETの例外はSoapFaultに変換されますが、ほとんどの他のツールキットと互換性がありますが、フォルトの情報はあまり良くありません。

Private Sub WebServiceExceptionHandler(ByVal ex As Exception) 
    Dim ueh As New AspUnhandledExceptionHandler 
    ueh.HandleException(ex) 

    '-- Build the detail element of the SOAP fault. 
    Dim doc As New System.Xml.XmlDocument 
    Dim node As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _ 
     SoapException.DetailElementName.Name, _ 
     SoapException.DetailElementName.Namespace) 

    '-- append our error detail string to the SOAP detail element 
    Dim details As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _ 
     "ExceptionInfo", _ 
     SoapException.DetailElementName.Namespace) 
    details.InnerText = ueh.ExceptionToString(ex) 
    node.AppendChild(details) 

    '-- re-throw the exception so we can package additional info 
    Throw New SoapException("Unhandled Exception: " & ex.Message, _ 
     SoapException.ClientFaultCode, _ 
     Context.Request.Url.ToString, node) 
End Sub 

詳細情報をsoapfaultsがin this question優れている理由:そのため、記事のconlusionは、.NET Webサービスは非常に良い例外メッセージをスローしませんし、あなたが情報を追加すべきであるということです。

1

どのようにWebサービスを使用するか、つまりどのプロトコルを使用するかによって異なります。

GETまたはPOSTの場合、呼び出し元のHttpWebRequest(.Net)または他のコードがサーバーエラーを受け取り、例外コードを抽出するために対処する必要があるため、エラーコードをよく返します。

SOAPの場合は、カスタム例外をスローすることができます(内部フレームワークの例外を返すことは望ましくありません。スタックトレースなどを外部に公開する可能性があります)。

SOAP Webサービスは、通常のメソッド呼び出しとして呼び出しコードを調べることを意味しているため、対応する呼び出しフレームワークは例外を処理して伝播できるだけでなく、呼び出しコードを見て動作させる必要があります内部コールを処理します。

+0

私は本当にこれが投票された理由を知りたいですか?それは完全に関連しています。 –

関連する問題