我想将一些参数作为数组传递给Web方法。 Web方法的签名没有params关键字。将参数数组传递给Web方法
我具有可变数量的参数(作为web方法接受),所以我不能把该阵列分成n个单变量。
这怎么办?
我想将一些参数作为数组传递给Web方法。 Web方法的签名没有params关键字。将参数数组传递给Web方法
我具有可变数量的参数(作为web方法接受),所以我不能把该阵列分成n个单变量。
这怎么办?
params
只是语法糖,为什么不只是做这样的事情:
var myWebService = new MyWebService();
myWebService.MyMethod(new string[] { "one", "two", "three" });
在Web服务端的方法签名也只是:
public void MyMethod(string[] values);
如果您发布你的网络方法或许可以提供更好的答案。
编辑
如果您不能修改Web方法签名,然后我会用一个extension method包住难以调用Web服务。例如,如果我们的Web服务代理类的样子:
public class MyWebService
{
public bool MyMethod(string a1, string a2, string a3, string a4, string a5,
string a6, string a7, string a8, string a9, string a10)
{
//Do something
return false;
}
}
然后,你可以创建一个接受字符串数组为params
,使呼叫MyWebService
扩展方法。
public static class MyExtensionMethods
{
public static bool MyMethod(this MyWebService svc, params string[] a)
{
//The code below assumes you can pass in null if the parameter
//is not specified. If you have to pass in string.Empty or something
//similar then initialize all elements in the p array before doing
//the CopyTo
if(a.Length > 10)
throw new ArgumentException("Cannot pass more than 10 parameters.");
var p = new string[10];
a.CopyTo(p, 0);
return svc.MyMethod(p[0], p[1], p[2], p[3], p[4], p[5],
p[6], p[7], p[8], p[9]);
}
}
然后,您可以使用您创建的扩展方法调用Web服务(只是一定要添加using
statment的命名空间,你宣布你的扩展方法):
var svc = new MyWebService();
svc.MyMethod("this", "is", "a", "test");
你为什么不use..an阵列?
[WebMethod]
public string Foo(string[] values)
{
return string.Join(",", values);
}
我不能修改的WebMethod。它的签名是'webmethod(字符串a1,字符串a2,...,字符串a10)' – CiccioMiami 2011-05-09 08:42:40
它不是我的风格downvote,我总是欣赏答案,并且为此我总是投票。我不认为这是我低调,但现在我甚至不能投票给你。我想这是与新版本的Mozilla相关的一些问题。只要它正常工作,我会投你一票。 – CiccioMiami 2011-05-09 15:18:26
@Francesco:没有烦恼,没有必要给予好评,因为我的回答并没有真正帮助您解决,感谢 – BrokenGlass 2011-05-09 15:24:00
忽视的事实这是一个网络方法片刻。最终,这是一种方法。和所有的方法一样,要么被定义为需要参数。如果没有定义参数,那么你不能传递参数给你,你能吗?除非你有权访问源代码,并有机会定义它。
如果它被定义为需要参数,那么问题是,它是否被定义为使用数组参数?如果没有,那么你就不能向它传递参数(除非你可以改变它,这样就可以了。)
谢谢您的回答,它接受的参数。它的签名是'webmethod(string a1,string a2,...,string a10)'。我想知道我是否可以传递一个数组(在这种情况下是10个元素)instag传递每个元素 – CiccioMiami 2011-05-09 08:44:52
不,这不行,如果可能的话,这将是很好的,但:) – 2011-05-10 15:49:02
感谢您的答复,我无法修改Web方法和方法签名的WebMethod(字符串A1,A2串.. ,串A10) – CiccioMiami 2011-05-09 08:40:27
@Francesco明白了,请参阅更新我的答案。希望有所帮助。 – rsbarro 2011-05-09 11:48:48