1

バックグラウンド

データのいくつかの異なる WCF "mex" エンドポイントに依存するプロジェクトを継承しました。私の特定のプロジェクトの目標は、完了すると、これらのレガシーWCF サービスを呼び出し、返されたオブジェクトを操作し (まれなケースのみ)、JSON にシリアル化し、要求元のクライアントに安らかに応答する API レイヤーとして機能することです。

C#、MVC 4、.NET 4。

私は RESTful Web サービスの経験は豊富ですが、WCF の経験はありません。

エンドポイント uri の例を次に示します。

http://product.sqa.acme.com/products.svc/mex

質問

これらの WCF サービスの 1 つを使用する最初のクラスをセットアップする際に、返されたオブジェクトを使用するためにデータ コントラクト全体をセットアップする必要があるようです。これは正しいです?IProductService >> GetProductById(123)これが正しくない場合、WCF インターフェイス (つまり) のメソッドを呼び出して、結果のオブジェクトをコントラクトなしで操作するにはどうすればよいですか?

私はこれを試しました:

var ip = (IProductService)new ProductServiceClient("http://product.sqa.acme.com/product.svc/mex");
            var product = ip.GetProductById("DVP4963619");

しかし、コントラクトが見つからないため、コードは失敗します。私がやろうとしていることの 90% は、単純にリクエストをパススルーし、JSON へのレスポンスをシリアライズすることなので、サービス呼び出しごとにコントラクトを定義しなければならないのはやり過ぎのように思えます。どんな助けでも大歓迎です。

ありがとう、

マット

4

1 に答える 1

3

サービスを利用するには、Visual Studio の [サービス参照の追加] ウィザードを使用している "mex" エンドポイントにポイントするだけで、データ コントラクト クラスを含むクライアントが生成されます

データを返す(REST) サービスを作成するには、2 つの選択肢があります。返すデータを表すデータ コントラクトを作成する (またはツールによって生成されたものを再利用する) ことができます。または、操作の出力を完全に制御したい場合は、それらをバイパスできます。操作がStream型を返す場合、(その抽象型のサブクラスを返すことによって) 出力に (JSON かどうかに関係なく) 何でも書き込むことができるため、そのためのデータ コントラクトを作成する必要はありません。この "raw モード" の詳細については、http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspxを参照してください。

データを返すもう 1 つの方法は、ASP.NET Web API などを使用することです。これは、Newtonsoft.Json.Linq 名前空間の JSON.NET 型を使用する「型指定されていない JSON」モデルをサポートしています。

于 2012-09-28T23:26:17.997 に答える