各位,有个问题想问下,我现在在搞一个webservice接口,现在有个问题,因为方法的参数不固定,终端在调用的时候会因为参数的个数增加并且没有对新增的参数做赋值操作而报错,有什么办法能让webservice的方法提供的参数客户端可以默认不做赋值操作?除了方法重写,每次更新个方法都要做个重写方法实在太麻烦了。
WS定义:
public string HelloWorld( string jsonpara) {
JsonObject jo=new JsonObject(jsonpara);
//解析JsonObject
}
经验性的写法就是这种?
public string HelloWorld( string jsonpara) {
JsonObject jo=new JsonObject(jsonpara);
//解析JsonObject
}
如果是这样的话,后边的接口我就也只能按这种写法来了,之前写的接口就没法动了。非常感谢。
把新增参数设置允许为 null。
如果是.net可以看一下关于【可选参数】这部分的内容,貌似是在4.0下新增的。
webservice的client无法 以可选参数的方式提交,客户端在调用的时候少了一个参数就报错了,请问这种情况如何解决呢?我已经把那几个新增参数设置了默认值,按照4.0可变参数的语法,有了默认值就是可变参数了吧?
@就叫我好人吧: 刚才测试了一下,引用WS服务后的确无法以可选参数的方式提交。现在提供的解决方案是:将参数的类型改成object[]类型或者根据你业务的需要的其它类型,这样就可以解决参数个数增加的问题。
@就叫我好人吧:给你个小例子。
WS定义:
public string HelloWorld( params object[] p) {
string sb = string.Empty;
foreach (object item in p) {
sb += item.ToString()+",";
}
return sb;
}
调用:client.HelloWorld(new ServiceReference1.ArrayOfAnyType(){1,2,"234234"});
@xiaoyu5062: 非常感谢,我本来也想改成这种方式的可变参数,可我这边的接口之前已经发布了一个版本了所有参数类型之前定义好为string int 类型的,要是我把参数改成这种方式,估计ios那边会把整个程序都的改动一边,太费事了。。。
你把多出来的参数进行拼接哈,传到客户端再进行拆分不就行了,虽然这样很不优雅