繁体   English   中英

如何传递List <int> 到服务参考(C#,VS2008)

[英]How to pass a List<int> to a service reference (C#, VS2008)

我遇到的问题是我创建了一个Web服务和一个Windows窗体(单独的解决方案)。 我使用服务引用将web服务添加到表单应用程序,我可以将“int”或“字符串”传递给Web服务没问题,但我无法传递int数组或List <int >

Web服务代码如下:

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web.Services;

namespace CalculateService
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]

    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public int CalcluateSum(List<int> listInt)
        {
            int sum = listInt.Sum();
            return sum;
        }
    }
}

并且客户端代码是:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CalculateForm
{
    public partial class FormCalculate : Form
    {
        List<int> intArray = new List<int>();

        public FormCalculate()
        {
            InitializeComponent();
        }

        private void btnAddNum_Click(object sender, EventArgs e)
        {
            intArray.Add(Convert.ToInt32(txtAddNum.Text));
            txtAddNum.Clear();
            listBoxAddNum.Items.Clear();
            for (int i = 0; i < intArray.Count; i++)
            {
                listBoxAddNum.Items.Add(intArray[i]);
            }
        }

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            CalculateForm.CalculateService.Service1SoapClient client = new CalculateForm.CalculateService.Service1SoapClient();
            int result = client.CalcluateSum(intArray);
            txtResult.Text = Convert.ToString(result);
        }
    }
}

我得到的错误是:

参数'1':无法从'System.Collections.Generic.List'转换为'CalculateForm.CalculateService.ArrayOfInt'

我相信这很简单,当有人指出它时我会感到愚蠢:)

干杯卡尔

WSDL无法处理列表,因此它使用数组,在将转换传递到服务方法之前进行转换。 在调用方法之前,只需在List上调用ToArray()。

我终于搞定了! :)

我设法让它传递List<int>而不是使用ToArray()方法。

这是客户端代码:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace CalculateForm
{
    public partial class FormCalculate : Form
    {
        List<int> listInt = new List<int>();

        public FormCalculate()
        {
            InitializeComponent();
        }

        private void btnAddNum_Click(object sender, EventArgs e)
        {
            listInt.Add(Convert.ToInt32(txtAddNum.Text));
            txtAddNum.Clear();
            listBoxAddNum.Items.Clear();

            for (int i = 0; i < listInt.Count; i++)
            {
                listBoxAddNum.Items.Add(listInt[i]);
            }
        }

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            CalculateService.Service1SoapClient client = new CalculateService.Service1SoapClient();

            CalculateService.ArrayOfInt arrayOfInt = new CalculateService.ArrayOfInt();

            arrayOfInt.AddRange(listInt);

            int result = client.CalcluateSum(arrayOfInt);

            txtResult.Text = Convert.ToString(result);
        }
    }
}

和Web服务代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web.Services;

namespace CalculateService
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]

    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public int CalcluateSum(List<int> listInt)
        {
            int sum = listInt.Sum();
            return sum;
        }
    }
}

所以我基本上只需要在客户端创建一个新的CalculateService.ArrayOfInt实例,然后从List<int> listInt添加数据范围,然后将arrayOfInt传递给Web服务。

欢呼大家帮忙,毫无疑问我很快就会回来:)

我是用WCE3.0扩展做的。 生成reference.cs文件时,系统将int[]而不是List<int> 您必须在reference.cs文件中用List<int>替换int[]

问候。

试试这个:

 client.CalcluateSum(intArray.ToArray()) 

这个问题看起来与类似。 我要说你需要编写一个快速静态函数,它接受一个List并执行一个类型转换到CalculateForm.CalculateService.ArrayOfInt。 您的Web服务已经生成了这种类型,它似乎没有期望。 我不熟悉这种行为,因为我经常在Web服务中传递列表,而我的Web服务总是设法为我执行转换.ToArray()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM