1

svcutil で生成されたクライアントを使用して、RESTful WCF サービスと通信しようとしています。

サービス契約は次のように定義されます。

public interface IService1
{
    [OperationContract]
    [WebGet(UriTemplate = "/GetTest?a={a}&b={b}&c={c}")]
    int GetTest(int a, int b, int c);
}

Visual Studio を使用してこのサービスを参照し、生成されたクライアント コードを使用して GetTest 操作を呼び出しました。残念ながら、次のメッセージが表示されました。

Operation 'GetTest' of contract 'IService1' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapperelements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped

しかし、Web ブラウザーから対応する URL を要求すると、正しく機能し、正しい戻り値が表示されました。

これは奇妙です。生成されたクライアント コードに問題はありますか? それとも、何か設定を間違えましたか?

以下は私のクライアント構成です:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="Service1EndPointBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <client>
        <endpoint address="http://localhost:8010/Service1/" behaviorConfiguration="Service1EndPointBehavior"
            binding="webHttpBinding" contract="ServiceReference1.IService1"
            name="Service1EndPoint" />
    </client>
</system.serviceModel>

ありがとう。

4

1 に答える 1

0

Add this attribute to your method

[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]

Explanation:

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

于 2012-10-11T12:33:38.977 に答える