Как передать Список <интервал> сервисной ссылке (C#, VS2008)

Проблема, которую я имею, состоит в том, что я создал веб-сервис, и, окна формируются (разные решения). Я добавил веб-сервис к приложению форм с помощью сервисной ссылки, я могу передать 'интервал' или 'строку' к веб-сервису без проблем, но я не могу передать массив интервала или Список<int>

Код веб-сервиса следующие:

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': не может преобразовать из 'Системы. Наборы. Универсальный. Список' к 'CalculateForm. CalculateService. ArrayOfInt'

Я уверен, что это - что-то простое, и я буду чувствовать себя ненормальным, когда кто-то укажет на это :)

Аплодисменты Carl

5
задан Carl 27 February 2010 в 13:46
поделиться

4 ответа

Наконец-то все заработало !! :)

Мне удалось заставить его передавать List вместо использования метода 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);
        }
    }
}

и код веб-службы:

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 listInt , затем передайте arrayOfInt веб-службе.

Приветствую всех за вашу помощь, без сомнения, я скоро вернусь :)

5
ответ дан 18 December 2019 в 13:13
поделиться

Попробуйте следующее:

 client.CalcluateSum(intArray.ToArray()) 
0
ответ дан 18 December 2019 в 13:13
поделиться

WSDL не может обрабатывать списки, поэтому вместо этого он использует массив, выполняя преобразование перед передачей его в ваш метод обслуживания. Просто вызовите ToArray () в своем списке перед вызовом метода.

8
ответ дан 18 December 2019 в 13:13
поделиться

Этот вопрос похож на этот . Я бы сказал, что вам нужно написать быструю статическую функцию, которая принимает список и выполняет преобразование типа в CalculateForm.CalculateService.ArrayOfInt. Ваш веб-сервис сгенерировал этот тип, и, похоже, он не ожидает меньшего. Я не знаком с этим поведением, потому что я регулярно передаю списки через веб-службы, и моим веб-службам всегда удавалось выполнить преобразование .ToArray () за меня.

0
ответ дан 18 December 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: