2011-05-06 26 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