嗨,StackOverflowers 同事,
我有一个 WCF 服务 wrtten C#,我可以成功地从 jquery 之类的东西中使用它。
我希望能够通过在 C# 中添加 Web 服务引用并在代码中进行调用来使用它。一切都很顺利,直到我添加了多个参数。当我尝试调用任何Service 方法时,我收到此错误:
合约“IPublic”的操作“GetStopNames”指定了多个要序列化的请求主体参数,而无需任何包装器元素。最多一个 body 参数可以在没有包装元素的情况下被序列化。删除额外的正文参数或将 WebGetAttribute/WebInvokeAttribute 上的 BodyStyle 属性设置为 Wrapped。
我用谷歌搜索并搜索了 StackOverflow 多年,但似乎每个人都通过设置
BodyStyle=WebMessageBodyStyle.Wrapped
WebGet / WebInvoke 属性解决了他们的问题。
接口中我的一种服务方法的示例:
[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中相关位的摘录
编辑:我在评论中链接的 serviceContract 的快捷方式 http://pastebin.com/bvGmGtfd
我最终切换到使用 WebApi,但我一直保持这个问题开放,因为我仍然不确定它为什么会失败。