C# WCF客户端中传递的多个参数don';t工作(即使包装了WebMessageBodyStyle)
嗨,各位飞越者 我有一个WCF服务wrtten C#,我可以成功地从jquery之类的东西中使用它 我希望能够通过在C#中添加web服务引用并在代码中调用来使用它。一切都很美好,直到我添加了多个参数。当我尝试调用任何服务方法时,会出现以下错误: 合约“IPublic”的操作“GetStopNames”指定了多个 请求在没有任何包装器元素的情况下序列化主体参数。 在没有包装器元素的情况下,最多可以序列化一个主体参数。 删除额外的实体参数或设置BodyStyle属性 在WebGetAttribute/WebInvokeAttribute上,单击“包装” 我在谷歌上搜索StackOverflow好几年了,但每个人似乎都通过设置来解决他们的问题C# WCF客户端中传递的多个参数don';t工作(即使包装了WebMessageBodyStyle),c#,.net,json,wcf,rest,C#,.net,Json,Wcf,Rest,嗨,各位飞越者 我有一个WCF服务wrtten C#,我可以成功地从jquery之类的东西中使用它 我希望能够通过在C#中添加web服务引用并在代码中调用来使用它。一切都很美好,直到我添加了多个参数。当我尝试调用任何服务方法时,会出现以下错误: 合约“IPublic”的操作“GetStopNames”指定了多个 请求在没有任何包装器元素的情况下序列化主体参数。 在没有包装器元素的情况下,最多可以序列化一个主体参数。 删除额外的实体参数或设置BodyStyle属性 在WebGetAttribute
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文件中相关内容的摘录
编辑:
我在评论中链接的serviceContract的快捷方式
我最终改用WebApi,但我仍然保留这个问题,因为我仍然不确定它为什么会失败
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetOperators?appKey={apk}",
BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json)]
ResultList GetOperators(string apk);
在.svc文件中,确保Service=“Developer\u Portal.Public”是GetStopNames中的问题。我假设它是Http Get(WebGet)。确保它接受的所有参数都在uri模板中定义 GetStopNames(字符串p1、字符串p2、字符串p3) uri=“GetStopNames/{p1}/{p2}?param1={p3}”或GetStopNames?param1={p1}¶m2={p2}¶m1={p3}或任何组合
无法通过添加服务引用为rest生成代理。您是否也有具有相同接口的基于soap的服务?您能否发布合约“IPublic”的
操作“GetStopNames”的定义?
?这没有什么意义。它非常长,有点像‘public ResultList GetStopNames(string apk,string p){……很多东西……返回一些ResultList();}’这个操作也是用[WebInvoke(BodyStyle=WebMessageBodyStyle.WrappedRequest)]
修饰的。我不确定我是否明白了。你是说在.svc.cs文件中?如果是这样的话,则不会。我假设由于[ServiceContract]接口充当接口并指定它,所以我不必这样做。(我刚刚测试并添加了一个(405)错误。我在问接口中方法的定义。你能发布你的整个[ServiceContract]接口吗?不是实现,只有接口。