Тема: [HTTP, SOAP] Як передавати List від клієнта до серера
Ніяк не можу знайти інформації, як правильно передавати контейнер List від клієнта до сервера (Веб сервіс, SOAP, .net).
Є такий лист
List<string> selectedParticipantsId = new List<string>();
Він перетворюється у масив байтів
byte[] SPIAsBytes = selectedParticipantsId.SelectMany(s =>
Encoding.UTF8.GetBytes(s + Environment.NewLine)).ToArray();
І передається через клас ServiceInvoker до серверу
Викликається InvokeService де
_SOAPRequest - XML запит
requestURLString - веб адреса (URL)
methodName - назва методу
class ServiceInvoker
{
private static readonly string _contentType = "text/xml;charset=\"utf-8\"";
private static readonly string _accept = "text/xml";
private static readonly string _method = "POST";
public static string InvokeService(
string _SOAPRequest,
string requestURLString,
string methodName)
{
//Calling CreateSOAPWebRequest method
HttpWebRequest request = CreateSOAPWebRequest(
requestURLString,
methodName
);
XmlDocument SOAPReqBody = new XmlDocument();
//SOAP Body Request
SOAPReqBody.LoadXml(_SOAPRequest);
using (Stream stream = request.GetRequestStream())
{
SOAPReqBody.Save(stream);
}
//Geting response from request
using (WebResponse Serviceres = request.GetResponse())
{
using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream()))
{
XmlSerializer serializer =
new XmlSerializer(typeof(ServiceResult));
//reading stream
var ServiceResult = rd.ReadToEnd();
//load xml
XmlDocument doc = new XmlDocument();
doc.LoadXml(ServiceResult);
//writting stream result
return doc.GetElementsByTagName("soap:Body")[0].
ChildNodes[0].
ChildNodes[0].
InnerText;
}
}
}
public static HttpWebRequest CreateSOAPWebRequest(string requestURLString,
string methodName)
{
//Making Web Request
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(requestURLString);
//SOAPAction
Req.Headers.Add(@"SOAPAction:http://tempuri.org/" + methodName);
//Content_type
Req.ContentType = _contentType;
Req.Accept = _accept;
//HTTP method
Req.Method = _method;
//return HttpWebRequest
return Req;
}
}
Ось так виглядає XML запит
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
</soap:Header>
<soap:Body>
<SaveGroup xmlns="http://tempuri.org/">
<groupName>?</groupName>
<description>?</description>
<additionalInformation>?</additionalInformation>
<selectedParticipantsId>?</selectedParticipantsId>
</SaveGroup>
</soap:Body>
</soap:Envelope>
Сервер має [WebMethod] який це все приймає, а потім в зворотньому порядку з string робить list контейнер
[WebMethod]
public string SaveGroup(
string groupName,
string description,
string additionalInformation,
string selectedParticipantsId)
{
byte[] SPIAsBytes = Convert.FromBase64String(selectedParticipantsId);
var a = Encoding.UTF8.GetString(SPIAsBytes);
List<string> _selectedParticipantsId = new List<string>();
_selectedParticipantsId = a.Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList<string>();
_selectedParticipantsId.RemoveAt(_selectedParticipantsId.Count - 1);
}
Є простіший спосіб передачі контейнера list від клієнту до серверу ? (Без конвертації даних)