2010-02-25 60 views
1

我試圖將使用SOAP協議的客戶端應用程序的整數通用列表傳遞給Web服務。將generic.list轉換爲ArrayOfInt以通過SOAP傳輸到Web服務

當我嘗試將列表作爲參數傳遞給Web服務中聲明的Web方法時,出現錯誤「無法從generic.list轉換爲ArrayOfInt」。

我該如何着手解決這個問題?

// web service method 
[WebMethod(CacheDuration = 30, Description = "Returns the calculated sum value of all numbers supplied in the list")] 
    public int CalculateListSum(int[] list) 
    { 
     int _sum = 0; 

     foreach (int _val in list) 
     { 
      _sum += _val; 
     } 

     return _sum; 
    } 

// client app buton click event 
private void btnRun_Click(object sender, EventArgs e) 
{ 
    string str = this.tbValues.Text; 
    // clear the list 
    ClearIntList(); 
    // take the textbox input, format and add to the List 
    PopulateIntList(str); 

    WSCalculate.CalculateSoapClient client = new WSCalculate.CalculateSoapClient(); 
    int[] _int_array = this._int_list.ToArray(); 
    // the line below is generating the error 
    int _result = client.CalculateListSum(_int_array); 
    this.tbResult.Text = _result.ToString(); 
} 

錯誤1最好重載方法 匹配 'WFCalculate.WSCalculate.CalculateSoapClient.CalculateListSum(WFCalculate.WSCalculate.ArrayOfInt)' 有一些無效 參數WFCalculate \ Form1.cs中58 27 WFCalculate

錯誤2參數 '1':不能轉換 從 'INT []' 到 'WFCalculate.WSCalculate.ArrayOfInt' WFCalculate \ Form1.cs中58 51 WFCalculate

回答

0

嘿ABS,想你可能想看看我的post,因爲我認爲我們有完全相同的問題...(可能是相同的課程笑),我設法解決它

4

SOAP不知道列表和集合,但瞭解數組。

轉換你的整數列表至整數數組:

int[] intArr = myList.ToArray(); 

並通過,而不是通過這一點。

更新:

看起來像web服務期待WFCalculate.WSCalculate.ArrayOfInt,所以你需要轉換你列出到並傳遞通過。

未測試:

WFCalculate.WSCalculate.ArrayOfInt myClientArray = (WFCalculate.WSCalculate.ArrayOfInt)myList.ToArray(); 
int _result = client.CalculateListSum(myClientArray); 
+0

只是一個評論。 IList 接口不具有在列表類中實現的ToArray方法。如果您使用的是框架3.5,您也可以使用每個IEnumerable 實例中的ToArray擴展方法。 – Fede 2010-02-25 15:02:32

+0

而不是將列表轉換爲數組,是否有可能序列化列表傳輸? – Unflux 2010-02-25 15:10:21

+0

@Abs - 你將不得不編寫自己的序列化來做到這一點。同樣,爲什麼要發明輪子,那麼SOAP是如何收集的呢? – Oded 2010-02-25 15:38:34