2009-10-23 11 views
5

私は、.Netクライアントとは独立して動作するWCFサービスの作成に取り組んできました。 GoogleとStackOverflowのおかげで、私はSoapラッパーを使わずに簡単なxmlとjsonサービスを作ることができました。また、必要のないWCFの束を作ることもできました。それは苦しい経験であり、したがってこの質問の件名です。 WCFは、WebGetとWebInvokeを使用して自動的にサービス参照を追加するときに、クライアント側で気になるバグです。WCFクライアント(Add Service Reference)は、WebGetとWebInvokeを嫌う...実際には

私はコミュニケーションを検査するために、ローカルにWCFクライアントを作成し、すべてをFiddlerに渡しています。そうすれば、クライアントが何を送信しようとしているかを少なくとも見ることができます。そして最終的にうまくいくと、私は両端から送られてきたデータを見ることができ、非ネットクライアントでこの通信を複製することができます。

私の現在の問題は、POSTデータをjson(enableWebScriptの動作)として期待するサービスを変更した場合、クライアントは考えておらず、オブジェクトをxmlとして送信しようとします。 Add Service Referenceを使用しているときにクライアントの設定が自動的に適切に設定されないという大きな問題がありましたので、クライアント上のapp.configに簡単に追加できることを期待しています。 XMLを使用する場合、サービスで作成して使用するオブジェクトは、クライアントによって自動的にXMLシリアライズされます(最も便利です)。現在のバージョンのWCFではjsonとしても可能ですか?

私は手作業で何をする必要があるのか​​を把握し、Fiddler(リクエストビルダー)を使って生のままで動作させることができたので、コードでオブジェクトをシリアル化して手動でデータを送信できますhttp投稿を介して...それは私のnon.Netクライアントでそれをやっているとにかくです。これは、WCFの側面をよりよく理解している理由と、なぜ問題を解決するためのドキュメントがほとんどない場合でも、クライアント側で非常に多くの属性が欠けている理由です。

+0

男..私はこれを先に読んでおきたいと思います。基本的に全く同じ思考プロセスを経てきました。私は、RESTクライアントがSOAPクライアントのように「ちょうどうまくいく」ことを期待していました。 –

+0

あなたはWCFに縛られていますか、またはサーバー/サービスペイロード技術の選択肢がありますか? 2年以上前にこれを投稿して以来、私はWCFの使用に抵抗してきました。私が作成または使用するすべてのサービスは、軽量XMLおよび/またはjsonデータを構築し、私自身のセキュリティとWCFが開発者にとってより便利にしようとしたものをロールアップします。私はWCFサービスとして公開されている一般的な公開Web APIを見つけることは事実上不可能だと言っていると思います。 – Rich

+0

いいえ、私たちはWCFに縛られていませんが、私たちのサービスの1つとして試してみるかもしれません。 WCFを使用してサーバー側コンポーネントを構築することは、すべてを理解するまで苦労していました。しかし、手作業でエンドポイントを構築する必要はありませんでした(SOAP/REST/JSONがすべて機能しています)。今は、.NETクライアントを使用していて、他の人にREST/JSONを使用させる場合は、SOAPを使用するだけです。 –

答えて

3

WCFサービス参照は、自己記述型のRPCペイロード(SOAP、wsHttpなど)です。同様に、WCFの厳密な型指定されたクライアントは、すべての型情報などをブロードキャストすることができるだけなので、RPCペイロードでのみ使用できます。それが正しく動作するために必要です。

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

もちろん、.Netクライアントを書くこともできますが、WebClient/WebRequestを使用して手書きしたり、XML/Jsonの要求/応答を手作業でフォーマット/読み込んだり(DataContractSerializerとDataContractJsonSerializerを使用して)それを助けるために)。

1

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

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