WCF调用中遇到的一个问题

千辛万苦写了个WCF,客户端程序添加了该服务引用,VS2010帮我生成了一堆代码后,毫无悬念的写了调用HelloWord函数的代码。编译运行。

出错了!!!!

SNAGHTMLa854338

约定“ISSOPartnerService”的操作“HelloWord”指定要序列化多个请求正文参数,但没有任何包装元素。如果没有包装元素,至多可序列化一个正文参数。请删除多余的正文参数,或将 WebGetAttribute/WebInvokeAttribute 的 BodyStyle 属性设置为 Wrapped。

 

这绝对是胡扯,明明就定义了WebGet

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped)]
 string HelloWord(string name1, string name2);
 
问题是,如果在IE里用URL调用,是成功的。有图为证
 
为毛,为毛??!
原来,VS2010帮我们生成的代码也需要加上WebGet特性才行,不然的话只能将所有参数打包成一个对象作为参数才行。

找到Reference.cs,并找到那个接口函数声明的位置

Code        [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped)]
        [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ISSOPartnerService/HelloWord", ReplyAction = "http://tempuri.org/ISSOPartnerService/HelloWordResponse")]
        string HelloWord(string name1, string name2);

记住需要添加System.ServiceModel.Web.dll引用。

问题是,MS不推荐你手工修改Reference.cs。。不然下次更新引用,这段话又没了,又要自己手工添加一次,烦!
 
编译运行。。成功了!

转载于:https://www.cnblogs.com/AmpyWalker/archive/2012/01/31/2332645.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值