0

WCFサービスのServiceContractで、次のように関数を定義しました。

[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/test")]
CommandResponse Test();

一方、クライアントアプリで、VisualStudioの[サービス参照の追加]を介してWCFサービスを追加しました。以下を使用してサービステスト関数を呼び出す場合:

var test = m_ServiceClient.Test();

次のようなエラーが発生します。

Operation 'GetUser' of contract... specifies multiple request body parameters to be serialized ...

GetUser()は、私がサービスコントラクトに持っている他の関数です(これもGET関数ですが、UriTemplateにパラメーターがあります)。私の推測では、クライアントは適切なパラメーターを使用して関数を呼び出していますが、要求は間違ったUriTemplateに送信されます(またはテンプレートがまったくなく、ある種のデフォルトにジャンプするだけです)。

UriTemplates関数についてクライアントに知らせるために従わなければならない特別な指示はありますか?

私はあちこちを検索しましたが、この問題に役立つ単一のページを見つけることができませんでした...

4

2 に答える 2

2

属性は、WCF サービスを REST スタイルで使用するためWebInvoke/WebGetにサービスを公開するときに使用されます。WebHttpBindingSOAP を介してメソッドにアクセスするには、[OperationContract]属性を追加し、 を介してエンドポイントを公開しますbasicHttpBinding

RESTスタイルでサービスにアクセスする場合は、Add Service Reference.

両方を実現するには、つまりSOAPとRESTを介してサービスにアクセスする[OperationContract]には、属性とともに追加し、WebInvoke別のエンドポイント要素を公開しますbasicHttpBinding

于 2012-08-07T08:40:57.477 に答える
0

クライアントがUriTemplatesを認識し、テンプレートで定義された形式で各メソッドを独自のUrlに渡すために、ServiceContractインターフェイスをクライアントにコピーしてから、サービスベースのURLへのチャネルを作成しました。

WebChannelFactory<IServiceContract> cf = new WebChannelFactory<IServiceContract>(new Uri("http://...."));
var service = cf.CreateChannel();

結果として得られる「サービス」は、Webサービスと直接連携する使用可能なインターフェースです。

于 2012-09-20T17:08:15.533 に答える