一:WebService中的方法是否允许重载?
二:为什么WebService中不支持方法的重载?
三:如何解决WebService中方法的重载?
一:WebService中的方法是否允许重载?
WebService中不支持使用方法的重载,从图片我们能够得出结论
[WebMethod]
代码如下 | 复制代码 |
public string GetName() [WebMethod] |
二:为什么WebService中不支持方法的重载?
WebService中不支持方法的重载,这还得从WebService的工作机制中说起,当客户端调用一个WebService的方法时,首先要将方法名称和需要传递的参数包装成XML,也就是SOAP包,通过HTTP协议传递到服务器端,然后服务器端解析这段XML,得到被调用的方法名称和传递过来的参数,进而调用WebService相应的方法,方法执行完毕后,将返回结果再次包装为XML,也就是SOAP响应,发送到客户端,最后客户端解析这段XML,最终得到返回结果,关键在于服务器端解析XML时无法识别重载的方法,WebService只认方法的名称,而且两个方法的名称相同,服务器端不知道该调用哪个相应的方法
三:如何解决WebService中方法的重载?
可以通过MessageName属性消除由于多个相同的名称造成的Web服务无法识别的问题,因为MessageName属性使得Web服务能够确定唯一别名的重载方法,默认时候是方法本身的名称,当指定MessageName属性后,SOAP将反映MessageName的值,而不是方法名称本身,所以这就解决了WebService中不支持方法的重载
代码如下 | 复制代码 |
[WebServiceBinding(ConformsTo = WsiProfiles.None)] [WebMethod(MessageName="FirstMethod")] [WebMethod(MessageName="SecordMethod")] |
我们现在来看这两个方法的消息名称是不就被区分开了
Webservice中的方法重载问题
(1)在要重载的WebMethod上打个MessageName标签
比如:
代码如下 | 复制代码 |
[WebMethod(MessageName = "HelloWorld1")] [WebMethod(MessageName = "HelloWorld2")] |
(2)此外还要在class上修改WebServiceBinding特性,如下:
代码如下 | 复制代码 |
[WebServiceBinding(ConformsTo = WsiProfiles.None)] public class UploadService : System.Web.Services.WebService { ... } |
2.无法序列化的对象如何作为参数传递
比如:
代码如下 | 复制代码 |
void TestMethod(MyObject p){ ... } |
这里MyObject是一个自定义类,并且无法序列化,如果你的WebService里有这样的方法,那么在浏览asmx时,会提示“MyObject无法序列化,因为没有无参数的构架函数”之类,解决办法有二个:
(a)修改MyObject,使其序列化,但如果MyObject已经封装成程序集(dll)无法修改的话,请看第二种方法
(b)将void TestMethod(MyObject p)修改为
代码如下 | 复制代码 |
void TestMethod(Object t){ MyObject p = t as MyObject ... } |
即把Object做为参数传入,然后在方法内部再Cast为MyObject,虽然这要增加了额外的拆箱,封箱操作,但总比不能用要好
另外,讲几个小技巧,如果要给方法增加描述说明,让引用webService的人更容易看懂,可以在[WebMethod(MessageName = "HelloWorld1")]后再增加一个Desciption="xxx",即
[WebMethod(MessageName = "HelloWorld1", Description = "描述内容,支持Html语法哦")]
同样整个WebService也可以增加描述,在class上增加Desciption属性,即
代码如下 | 复制代码 |
[WebService(Namespace = "http://www.yourdomain.com/",Description="服务说明,支持html语法")] [WebServiceBinding(ConformsTo = WsiProfiles.None)] public class UploadService : System.Web.Services.WebService { ... } |
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级