2012-10-09 96 views
3

嗨傢伙StackOverflowers,多個參數

我有一個WCF服務wrtten C#,我可以成功地從東西像jQuery消耗。

我希望能夠通過在C#中添加Web服務引用並在代碼中進行調用來使用它。一切都很好,直到我添加了多個參數。當我嘗試調用任何服務方法,我得到這個錯誤:

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

我用Google搜索和搜索StackOverflow上的年齡,但每個人都似乎有自己的問題,固定由WebGet/WebInvoke屬性設置 BodyStyle=WebMessageBodyStyle.Wrapped

的界面我的服務方法中的一個例子:

[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"); 

客戶端裏面,它打破在第二行。

任何想法?如果有任何你需要幫助回答我更多的數據,只是添加評論:)

編輯: 這裏有相關位的摘錄從我的Web.config文件 http://pastebin.com/CyQNG6wk

編輯: 快捷方式服務合同我鏈接的評論 http://pastebin.com/bvGmGtfd

我結束了切換到使用WebApi,但我仍然保持這個問題,因爲我仍然不知道爲什麼它失敗。

+0

你可以發佈合同'IPublic''的Operation'GetStopNames'的定義嗎? – carlosfigueira

+0

真的沒有一點。這真的很長,像 '公衆ResultList GetStopNames(字符串apk,字符串p) { ....很多東西... 返回一些ResultList(); }' – Oofpez

+0

該操作是否也用'[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest)]'裝飾? – carlosfigueira

回答

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

在.svc文件確保服務= 「Developer_Portal.Public」

0

其在GetStopNames問題。我假設它是Http Get(WebGet)。確保所有它接受在URI模板中定義的參數 GetStopNames(串P1,串P2,串P3)

URI = 「GetStopNames/{P1}/{P2}?參數1 = {P3}」 或GetStopNames? param1 = {p1} & param2 = {p2} & param1 = {p3}或任意組合

您不能通過添加服務引用生成代理休息。你有相同的界面基於肥皂的服務嗎?