7

私は自分でいくつかのWCFを学ぼうとしています。私はC#/ ASP.netの知識を持っていますが、WCFは初めてです。学習中に、VisualStudio2010を使用していくつかのアプリを開発しています。

ユーザーが新しいイベントを作成/削除/編集できるTODO/タスクマネージャーのバックエンドとして機能する小さなWebサービスを開発しました。それはすべて非常にシンプルで基本的です。

私の質問は次のとおりです。

  1. 新しい操作コントラクトを作成せずに、クライアントが希望する戻り形式(xml / json / rdfなど)を選択できるようにする方法はありますか?
  2. Webサービスが私に送信する正確なメッセージをクライアントで確認するにはどうすればよいですか(たとえば、json表現かxmlメッセージかを確認できます)。
4

4 に答える 4

9

WCFを使用してRESTサービスを作成すると、コンテンツネゴシエーションがサポートされます。

エンドポイントで に設定automaticFormatSelectionEnabledする必要があります。true

参照:WCFWebHTTPフォーマット

于 2012-09-27T11:15:12.957 に答える
3

WebブラウザがWebサイトから応答形式を選択する方法は、コンテンツネゴシエーションを介して、特にAcceptおよびContent- TypeHTTPヘッダーを使用することによって行われます。

たとえば、クライアントがJSON形式の応答を必要とする場合、次のようなHTTPリクエストをサーバーに送信します。

GET /resource HTTP/1.0
User-Agent: YourClient 1.0
Accept: application/json

次に、サーバーは次のようなHTTPパケットで応答します。

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 20

{ "type" : "json" }

残念ながら、WCFにはコンテントネゴシエーションをすぐに処理する機能がありませんが、WcfRestContribと呼ばれる非常に多くの作業を行わずにそれを可能にする非常に優れたサードパーティライブラリがあります。彼らのドキュメントは、それを機能させるためにあなたが取らなければならない(非常に単純な)ステップを説明しています。要約すると、あなたはしなければなりません

  1. サポートしたいコンテンツタイプに応じてサービスクラスを装飾し、
  2. コンテントネゴシエーションを意識したい方法を飾り、そして
  3. そのメソッドからシリアル化可能なビジネスオブジェクトを返します。

2番目の質問については、Fiddlerはクライアントとサーバーの両方をテストするための優れた選択肢です。

于 2012-06-02T01:40:54.217 に答える
1

私の経験では、WCFはこの分野では優れていません。MVCは、特定のエンドポイントに必要なものを何でも返すことができる「アクション結果」の概念による大きな改善です。(そして、おそらく新しい「Web API」は、WCFとMVCの機能を組み合わせたものになるでしょう。)

とはいえ、クライアントに応答形式を選択させる最も簡単なWCFの方法は、ストリームの戻りの種類を指定し、要件に従って結果をシリアル化することです。

したがって、このようなメソッドを宣言し、JSONおよびXMLに選択したシリアライザーを使用します。

[OperationBehavior]
[WebGet()]
public Stream SomeOperation(string format)
{
    string test = "Hello world";
    string encodedResult;
    if (format.ToLower() == "xml") {
        // serialize as XML (eg, XML Serializer)
        HttpContext.Current.Response.ContentType = "text/xml";
    }
    else if (format.ToLower() == "json") {
        // serialize as JSON (eg, Newtonsoft Json)
        HttpContext.Current.Response.ContentType = "application/json";
    }
    var ms = new MemoryStream(Encoding.UTF8.GetBytes(encodedResults));
    return ms;
}

2番目の質問では、Fiddlerなどの無料ツールを使用してサーバーからの生のHTTP応答を検査することをお勧めします。

于 2012-06-02T00:47:38.833 に答える
1

SOAPベースのサービスを利用する代わりに、RESTモデルを試すことができます。MSテクノロジを使用してRESTまたはHTTPサービスを作成する新しい方法は、ASP.NETMVC4で利用できるWebAPIを使用することです。

RESTの利点:

  1. コンテンツネゴシエーション-クライアントは、ヘッダーのAccept-Typeパラメーターを介してデータ型(JSON、XML ..)を指定できます。Request

  2. HTTPメソッドを明示的に使用する

  3. ディレクトリ構造のようなURI

もっと..

于 2012-06-02T05:17:47.123 に答える