2011-05-06 51 views
3

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

我具有可变数量的参数(作为web方法接受),所以我不能把该阵列分成n个单变量。

这怎么办?

回答

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 statment的命名空间,你宣布你的扩展方法):

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

感谢您的答复,我无法修改Web方法和方法签名的WebMethod(字符串A1,A2串.. ,串A10) – CiccioMiami 2011-05-09 08:40:27

+0

@Francesco明白了,请参阅更新我的答案。希望有所帮助。 – rsbarro 2011-05-09 11:48:48

1

你为什么不use..an阵列?

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

我不能修改的WebMethod。它的签名是'webmethod(字符串a1,字符串a2,...,字符串a10)' – CiccioMiami 2011-05-09 08:42:40

+0

它不是我的风格downvote,我总是欣赏答案,并且为此我总是投票。我不认为这是我低调,但现在我甚至不能投票给你。我想这是与新版本的Mozilla相关的一些问题。只要它正常工作,我会投你一票。 – CiccioMiami 2011-05-09 15:18:26

+1

@Francesco:没有烦恼,没有必要给予好评,因为我的回答并没有真正帮助您解决,感谢 – BrokenGlass 2011-05-09 15:24:00

1

忽视的事实这是一个网络方法片刻。最终,这是一种方法。和所有的方法一样,要么被定义为需要参数。如果没有定义参数,那么你不能传递参数给你,你能吗?除非你有权访问源代码,并有机会定义它。

如果它被定义为需要参数,那么问题是,它是否被定义为使用数组参数?如果没有,那么你就不能向它传递参数(除非你可以改变它,这样就可以了。)

+1

谢谢您的回答,它接受的参数。它的签名是'webmethod(string a1,string a2,...,string a10)'。我想知道我是否可以传递一个数组(在这种情况下是10个元素)instag传递每个元素 – CiccioMiami 2011-05-09 08:44:52

+0

不,这不行,如果可能的话,这将是很好的,但:) – 2011-05-10 15:49:02