5

私は、.Net クライアントから独立して動作する WCF サービスの作成に取り組んできました。Google と StackOverflow のおかげで、単純な xml サービスと json サービスの両方を、Soap ラッパーや必要のない派手な WCF 機能を使わずに作成することができました。それはつらい経験だったので、この質問の件名です。WCF は、サービス参照を自動的に追加するときに WebGet および WebInvoke を使用すると、クライアント側でバグが発生します。

通信を検査するために、ローカルで WCF クライアントを作成し、すべてをFiddlerに渡しました。そうすれば、それが機能するかどうかにかかわらず、少なくともクライアントが何を送信しようとしているのかを確認できます。最終的に機能するようになると、データが両端から送信されていることがわかり、.Net 以外のクライアントでこの通信が複製されます。

私の現在の問題は、POST データを json (enableWebScript の動作) として期待するようにサービスを変更すると、クライアントが認識せず、オブジェクトを xml として送信しようとすることです。[サービス参照の追加] を使用すると、クライアントの構成が自動的に適切に設定されないという問題がたくさんあったので、クライアントの app.config に簡単に追加できることを願っています。XML を使用する場合、作成してサービスで使用するオブジェクトは、クライアントによって自動的に xml シリアル化されます (これが最も便利です)。現在のバージョンの WCF で json として実行することは可能ですか?

手動で何をする必要があるかを把握し、Fiddler (リクエスト ビルダー) を使用して生の形式で動作させることができたので、コードでオブジェクトをシリアル化し、http ポストを介して手動でデータを送信できることに注意してください。 ..とにかく、.Net以外のクライアントでそれをやっている方法です。これは、WCF の側面をよりよく理解するための質問であり、問​​題に対処するためのドキュメントがほとんどまたはまったくないクライアント側で非常に多くの属性が欠落している理由です。

4

2 に答える 2

3

WCFサービス参照は、自己記述型のRPCペイロード(SOAP、wsHttpなど)を対象としています。同様に、WCFの強い型のクライアントは、RPCペイロードでのみ機能することを目的としています。これは、RPCペイロードに必要なすべての型情報などをブロードキャストできるためです。正しく動作します。

webgetとwebinvokeを使用すると、非rpcサービス(RESTサービスの作成を目的としたもの)が作成されますが、これも自己記述型ではないため、サービス参照機能には最適ではありません。

もちろん、このための.Netクライアントを作成することもできますが、WebClient / WebRequestを使用して、XML / JSONリクエスト/レスポンスを手動でフォーマット/読み取りする(またはDataContractSerializerとDataContractJsonSerializerを使用して支援する)方がはるかに簡単です。それ)。

于 2010-01-09T01:08:01.760 に答える
1

SOAP は (WSDL を介して) 自己記述的です。

WebGet/WebInvoke は、XML の代わりに JSON を使用するようにクライアントに指示するメタデータを公開しません。

于 2010-01-09T01:33:11.783 に答える