3

StackOverflowers さん、こんにちは。

私は、jquery などから正常に消費できる C# で書かれた WCF サービスを持っています。

C# で Web サービス参照を追加し、コードで呼び出しを行うことで、それを使用できるようにしたいと考えています。複数のパラメーターを追加するまでは、すべてバラ色でした。Service メソッドを呼び出そうとすると、次のエラーが発生します。

コントラクト 'IPublic' の操作 'GetStopNames' は、ラッパー要素なしでシリアル化される複数の要求本文パラメーターを指定します。ラッパー要素なしでシリアル化できる body パラメーターは最大で 1 つです。余分なボディ パラメーターを削除するか、WebGetAttribute/WebInvokeAttribute の BodyStyle プロパティを Wrapped に設定します。

私は何年にもわたって StackOverflow をグーグルで検索しましたが、誰もが BodyStyle=WebMessageBodyStyle.Wrapped WebGet / WebInvoke 属性を設定することで問題を解決したようです。

インターフェイス内の私のサービス メソッドの 1 つの例:

    [OperationContract]
    [WebGet( BodyStyle=WebMessageBodyStyle.WrappedRequest
     , UriTemplate = "GetOperators?appKey={apk}"
     , RequestFormat = WebMessageFormat.Json
     , ResponseFormat = WebMessageFormat.Json)]
    ResultList GetOperators(string apk);

これに何か問題がありますか?

私はただ電話している

ServiceReference1.PublicClient c = new ServiceReference1.PublicClient();
c.GetOperators("XXX");

クライアント内で、2行目で壊れています。

何か案は?私に答えるために必要なデータが他にもある場合は、コメントを追加してください:)

編集:これは私のWeb.configファイルからの関連ビットの抜粋です http://pastebin.com/CyQNG6wk

編集: コメントでリンクした serviceContract へのショートカット http://pastebin.com/bvGmGtfd

最終的に WebApi の使用に切り替えましたが、なぜ失敗したのかまだわからないので、この質問を開いたままにしています。

4

2 に答える 2

0
     [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "GetOperators?appKey={apk}",
     BodyStyle =  WebMessageBodyStyle.Wrapped,
     ResponseFormat = WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json)]
     ResultList GetOperators(string apk);

.svc ファイルで、Service="Developer_Portal.Public" であることを確認します。

于 2013-07-23T08:09:00.473 に答える