0

SOAP WCF を変更して、リクエストを受け入れ、JSON 形式で結果を返すようにして、データ トラフィックのかさばりを少なくしたいと考えています。

JSON リクエスト関数が次のようになっていることがわかります。

wcfClient.OpenReadAsync( http://yourUrl.com/wcf/service1.svc/GetEmployees )

代わりに、次のような通常の SOAP リクエスト関数を実行します。

wcfClient.GetEmployeesAsync();

1) JSON の結果の場合、それらをオブジェクトに解析する必要がありますか、それとも SOAP のように自動的に解析されますか?

2)プロジェクト内のすべてのWCF呼び出しを「JSON風」に変更するなど、あまり多くの作業を行わずにこれを行う方法はありますか?

4

2 に答える 2

2

Davutの答えを補完するために-WCFはRESTfulサービスの構築をサポートしていますが、ASP.NETWebAPIフレームワークは一般的にWCFよりも使いやすいことに同意します。JSON.NETは優れたライブラリであり、優れた逆シリアル化機能を備えています(たとえば、オブジェクトのリストを表すJSONを簡単に取得して、実際のインスタンスEmployeeに変換できます)List<Employee>

ただし、完全を期すために、「通常の」WCFクライアントを使用してJSONを返すWCFベースのサービスにアクセスする場合は、それを行うことができます。それほど単純ではありませんが、変換を行う新しいエンコーダーと動作を使用することでそれを行うことができます。http://blogs.msdn.com/b/carlosfigueira/archive/2010/04/29/sumption-rest-json-services-in-silverlight-4.aspxの投稿で、それについて詳しく説明されており、コードサンプル。

つまり、SilverlightのWCFクライアントを使用してJSONを使用することは可能ですが、その複雑さのため、通常は実行されません。Davutのオプション(WebClientなどのHTTPクライアントを使用してJSONをダウンロードし、次にJSON.NETなどのライブラリを使用して解析します)オブジェクトにそれを)が優先されます。

于 2013-02-24T15:54:23.527 に答える
1

まず、「データトラフィックをかさばらないようにする」という考えです。いいね。

特にモバイル デバイスの場合。これに加えて、WCF xml が PC のネットワークの問題を引き起こすとは思わないでください。XM は、最も圧縮性の高い形式の 1 つです。WCFバイナリでは、圧縮されたままになります。

「あまり手間をかけずにこれを行う方法はありますか?」

はい、そこに RESTFul Services(Restless Services) という名前のウェイがあります。現在、Microsoft は WEBApi で直接サポートしています。

また、フィルタリング、順序付け操作に ODATA を使用することもできます

ここにいくつかのリンクがあります、

http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.aspx

http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx

ODATA http://www.odata.org/documentation/uri-conventions#FilterSystemQueryOption

いくつかの練習ノート、いくつかの制限:

IsReferenceType 属性を持つ EntityObject から派生した EntityFrameWork エンティティでは、JSON シリアル化が許可されません。(オートマッパーを使用してPOCOオブジェクトを作成し、それらをマッピングしてjsonをシリアル化しました)

WebGet、WebInvoke GetXML などの WEBAPI サポート JSON 、ODATA 機能を提供 (選択してフォーマットすることはできません。)

注:Web リクエストのヘッダーでは、実際に json を取得するには、text/json を受け入れる必要があります。

「JSON の結果については、それらをオブジェクトに解析する必要がありますか、それとも...」

JSON.NETを試す必要があると言えます。ポータブル ライブラリはどこでも機能します。ジェネリック関数で逆シリアル化すると、期待するコレクションが返されます。

それが誰かを助けることを願っています。これらのスタックオーバーフローを発見したことで、私はアシスタントのようになりました。

于 2013-02-23T13:39:04.417 に答える