1

web.config で大量のバインド構成を作成する必要がないように、WCF サービスで WebServiceHostFactory を使用しています。

ただし、サービスを XML/JSON および JSONP として公開したいと考えています。

読書: http://jasonkelly.net/archive/2009/02/24/using-jquery-amp-jsonp-for-cross-domain-ajax-with-wcf-services.aspx

山ほどのカスタム バインディング構成に頼らずに、WCF を拡張して JSONP を追加できるようには見えません。

それで、それをやった人にとって、UriTemplateに応じてXML / JSON / JSONPで応答する安らかなWCFサービスを持つことは可能ですか?

4

3 に答える 3

3
  1. JSONP は、NET4 より前のカスタム バインディングを通じてのみ使用できます。.NET 4 では、JSONP のサポートを追加する crossDomainScriptAccessEnabled という新しいプロパティが WebHttpBinding に追加されました。http://www.bendewey.com/blog/index.php/186/using-jsonp-with-wcf-and-jqueryを参照してください。

  2. UriTemplates を使用して 1 つのサービスで XML と JSON を受け入れる方法については、このプレゼンテーションで 2 つの手法について説明します http://www.bendewey.com/blog/index.php/176/alt-net-rest-presentation (完全なソース コードはこちらからも入手できます) )。

    1. 2 つのエントリ メソッドを使用し、内部メソッドで呼び出しを処理します。サンプル 1 を参照してください。

    2. キャッチオール メッセージ イン/アウト コントラクトを使用し、サービス コールを手動でルーティングします。サンプル 2 を参照してください。

サンプル1

    [OperationContract]
    [WebGet(UriTemplate = "/")]
    Years GetYears();

    [OperationContract]
    [WebGet(UriTemplate = "/json/", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Years GetJsonYears();

    Years GetYearsInternal();

サンプル 2

    [OperationContract]
    [WebGet(UriTemplate = "*")]
    Message Get();
于 2010-02-28T17:03:32.077 に答える
2

サービス コントラクトにさまざまな応答形式を持つさまざまなメソッドを用意することで、これを非常に簡単に行うことができるはずです。

interface IYourService
{
     [OperationContract]
     [WebGet(UriTemplate="/YourMethod/XML", ResponseFormat=WebMessageFormat.Xml)]
     SomeReturnObject YourMethodAsXml(.....);

     [OperationContract]
     [WebGet(UriTemplate="/YourMethod/JSON", ResponseFormat=WebMessageFormat.Json)]
     SomeReturnObject YourMethodAsJson(.....);
}

両方のメソッドは、データの実際の計算/ルックアップまたはあなたがしていることを行う共通のコア関数を呼び出すことができます。

これには大きな構成戦争は含まれていないと思います....そして、3つのポイントのうち少なくとも2つ(XMLとJSON)を解決します。

JSONP は WCF でネイティブにサポートされていませんが、参照した記事が示すように、この動作をかなり簡単に追加できます。ただし、この WCF 拡張機能を有効にするには、いくつかの設定を配線する必要があります。しかし、私が見る限り、それはサーバー上で 1 回限りのものであるはずです。

この構成セットアップを本当に処理できない場合は、もちろん、WCF REST サービスに使用されるWebServiceHostFactoryWithJSONPSupportからカスタムを派生させWebServiceHostFactory、必要な拡張機能 (サービスの動作など) をホスト ファクトリに追加することができます。クラスは封印されていないため、十分に単純なはずです(少なくとも理論的には:-))。

于 2010-02-28T16:49:28.840 に答える
0

WCF Data サービス (以前の Astoria) は OData と JSON を直接サポートしていることをお知らせします。

コーディングは必要ありません。VS 2010 では、次のことを行うだけです。

  1. ADO.NET エンティティ モデルの作成
  2. 新しい WCF データ サービスを作成する

これにより、提供された構成に基づいて JSON または Atom を発行する REST-ful Web サービスが自動的に作成されます。デフォルトは ATOM です。JSON 形式のデータを取得するには、クライアントの「Accept」ヘッダーで「application/json」を指定する必要があります。

JSONP を作成するには、いくつかの作業が必要です。このリンクを確認してください: リンク 1

于 2010-05-21T23:34:45.557 に答える