Проблема, которую я имею, состоит в том, что я создал веб-сервис, и, окна формируются (разные решения). Я добавил веб-сервис к приложению форм с помощью сервисной ссылки, я могу передать 'интервал' или 'строку' к веб-сервису без проблем, но я не могу передать массив интервала или Список<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
Наконец-то все заработало !! :)
Мне удалось заставить его передавать 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
, затем передайте arrayOfInt
веб-службе.
Приветствую всех за вашу помощь, без сомнения, я скоро вернусь :)
Попробуйте следующее:
client.CalcluateSum(intArray.ToArray())
WSDL не может обрабатывать списки, поэтому вместо этого он использует массив, выполняя преобразование перед передачей его в ваш метод обслуживания. Просто вызовите ToArray () в своем списке перед вызовом метода.
Этот вопрос похож на этот . Я бы сказал, что вам нужно написать быструю статическую функцию, которая принимает список и выполняет преобразование типа в CalculateForm.CalculateService.ArrayOfInt. Ваш веб-сервис сгенерировал этот тип, и, похоже, он не ожидает меньшего. Я не знаком с этим поведением, потому что я регулярно передаю списки через веб-службы, и моим веб-службам всегда удавалось выполнить преобразование .ToArray () за меня.