将参数数组传递给Web方法

时间:2011-05-06 14:44:58

标签: c# web-services

我想将一些参数作为数组传递给Web方法。 Web方法的签名没有params关键字。

我有一个可变数量的参数(因为web方法接受)所以我不能将数组放入n个单个变量。

如何做到这一点?

3 个答案:

答案 0 :(得分:5)

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语句:

var svc = new MyWebService();
svc.MyMethod("this", "is", "a", "test");

答案 1 :(得分:1)

你为什么不使用......数组?

[WebMethod]
public string Foo(string[] values) 
{
   return string.Join(",", values);
}

答案 2 :(得分:1)

暂时忽略它是 web 方法的事实。最终,这是一种方法。和所有方法一样,要么定义参数,要么不参数。如果未定义参数,则无法将参数传递给它,可以吗?除非您可以访问源代码并且能够理解它的定义。

如果它被定义为采用参数,那么问题是,它是否被定义为采用数组参数?如果没有,那么你就不能将参数传递给它(除非你可以改变它以便它可以。)