私が現在取り組んでいるWebサービスプロジェクトの途中以上に、私の顧客はクライアントアプリケーションに例外を投げることはできないと私に知らせることにしました。問題は、今までは、検証、データベースまたはその他の種類のエラーが発生するたびにFaultException
例外を投げていたことです。私は明らかにそれ以上の質問なしにこの動作を変更する必要がありますが、問題は私が本当にそれを置き換えるべきか分からないということです。サービスには異なるDataContract
構造体を返す4〜5個の終点があるので、ブール値(失敗または成功を示す)とobject
を持つ基本クラスを設計することを考えました(シリアル化された例外をスローする場合にはこれを使用します)他のすべてをDataContracts
がこの構造から継承するようにします。しかし、私はこれが最良の選択肢であるとは本当に確信していません。私に何をするようアドバイスしますか?WCF、例外および継承
答えて
この要件は、Silverlightのコンシューマが、httpクライアントスタック(独自の欠点があります)に切り替わらない限り、例外を適切に処理できないサービスにアクセスすることが想定されるためです。
私たちは、クライアントがチェックする必要のあるすべてのサービスメソッドシグネチャにFault outパラメータを含めることで、この問題を解決しました。それは実際にはそれよりも悪く聞こえる。
これは、何かを返すサービス操作に対して確実に機能します。したがって、あなたが提案したように、そのような操作を使用するだけの場合:サービス操作を捕まえて、返されたデータコントラクトで例外をラップしてみてください。
void戻り値の型を持つサービス操作はどうですか?キャッチを試みることもできますが、どのようにステータス/エラーをクライアントに返すのですか?あなたはあなたのアプリでこのシナリオをhevするつもりですか?
はい、私はそれについても考えていませんでした。私はいくつかの 'void'メソッドを持っています... – User
これは"良い "データと"悪い "データを混在させています。 –
- 1. WebService、WebMethodおよび継承
- 2. DataContractSerializer、KnownTypeおよび継承
- 3. 継承およびJava
- 4. リフレクション、継承、およびJava
- 5. 純粋仮想継承、多重継承、およびC4505
- 6. ARC、非ARC、および継承
- 7. ミックスイン、マルチ継承、コンストラクタ、およびデータは
- 8. 継承、ジェネリック、およびプロトコルは、スウィフト
- 9. F#および継承のモデリング
- 10. Java:ビルダーパターン、継承、およびジェネリック
- 11. ソナタsonata_type_model_listおよび継承エンティティ
- 12. WCF MessageContract継承
- 13. Typescript 2.4.1およびより一般的なジェネリック型の型/継承の継承
- 14. void戻り値型の例外およびWCFサービス
- 15. チェック例外およびイニシャライザブロック
- 16. シルバーRoutedEventsおよび例外
- 17. 例外、Global.asax、およびイベントログ
- 18. C++で例外を継承する
- 19. Rails 5 ApplicationRecord継承(例外あり)
- 20. 例外クラスの多重継承
- 21. オブジェクト継承によるWCF直列化?
- 22. 存在する例外の継承例外
- 23. WCF契約継承コントラクト
- 24. WCFでDataContractを継承
- 25. WCFとオブジェクトの継承
- 26. RSpec、暗黙のサブジェクト、および例外
- 27. のstd ::先物および例外
- 28. JavaおよびMatlabの例外
- 29. SDL、OpenGLおよびIOS処理例外
- 30. 例外仕様およびテンプレート
私の場合はうまくいくかもしれませんが、実際にはあまりにもエレガントなようには聞こえません。 – User
トピックについての記事http://msmvps.com/blogs/theproblemsolver/アーカイブ/ 2009/01/27 /戻る例外情報 - 銀色のクライアント - クライアント - wcf.aspx –
ありがとう!まあ、私は本当にこのアプローチを使わなければならないと思います。私はそれについて考えたことはありませんでした...それはあまりにもエレガントではないかもしれませんが、顧客が何かエレガントなものを望んでいた場合、この要件はとにかく提出されていないだろう...だから、 – User