WCF RESTメソッドから異なるタイプを返す方法はありますか?

StackOverflow https://stackoverflow.com/questions/140255

  •  02-07-2019
  •  | 
  •  

質問

Webサービスを仕様に記述しようとしていますが、メソッドが正常に完了するかどうかに応じて、異なる応答本文が必要です。 2つの異なるDataContractクラスを作成しようとしましたが、それらを返して正しくシリアル化するにはどうすればよいですか?

役に立ちましたか?

解決

答えははいですが、それは注意が必要であり、インターフェイスで強いタイピングを失います。 Stream を返す場合、データはxml、テキスト、またはバイナリイメージです。 DataContractクラスの場合、 DataContractSerializer を使用してデータをシリアル化します。

BlogSvc 、より具体的には RestAtomPubService.cs WCFサービスで詳細を確認してください。ソースコードは、コンテンツタイプマッパーを必要とするWCFレストメソッドにさまざまなタイプのデータを受け入れる方法も示していることに注意してください。

他のヒント

WCF Webサービスが失敗したことを示す最良の方法は、FaultExceptionをスローすることです。サービスweb.configファイルには、エラーの一部としてエラーメッセージ全体をクライアントに渡すことができる設定があります。

別のアプローチとして、同じ基本クラスまたはインターフェースから両方の結果を継承することがあります。サービスは、基本型のインスタンスを返します。その後、KnownType属性を使用して、複数のタイプが返される可能性があることをクライアントに通知できます。考えてみると、基本型としてObjectを使用することは可能かもしれませんが、私は試していません。

これらのアプローチのいずれかが失敗した場合、結果とエラーの両方のプロパティを含むカスタム結果オブジェクトを作成し、クライアントが実行するアクションを決定できます。 Beta 2はまだフォールトコントラクトを完全にはサポートしていないため、Silverlight 2にはこのアプローチを使用する必要がありました。それはきれいではありません、私は通常それをお勧めしませんが、それが機能する唯一の方法であるか、それがあなたの状況に最適なアプローチであると感じたら...

ADO.NET Data Servicesで問題が発生している場合、その経験はあまりありません。

ここにいくつかの情報があります FaultContractsの実装について

xmlベースのバインディングを使用している場合、それを行う方法はないと考えています。その場合の簡単な解決策は、障害が発生した場合にメッセージフラグの一部を保持し、必要に応じて障害情報をどこかに保存することです。 JSONバインディングの場合、オブジェクトを返すメソッドを使用してから、2種類のオブジェクトを返すことができます。正しく覚えている場合(これはまれです)、それは可能です。なぜなら、オブジェクトがシリアル化属性を取り除いている場合、JavaScriptSerializerクラスはリフレクションを使用するからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top