Оберните XML в конверт SOAP в .net

Мне нужна помощь с упаковкой XML в конверт SOAP для стороннего сервера SOAP. Третья сторона предоставила файлы xsd для входящего запроса и исходящего ответа. Я взял эти XSD-файлы и создал их классы C # с помощью инструмента xsd. Моя проблема в том, что мне нужно обернуть сериализованный запрос конвертом SOAP, и я не знаю, с чего начать. Я смотрел на Microsoft Web Service Enhancements 3, но это говорит о том, что это только для .net 2.0 и VS2005. Я использую VS2012 и .net 4.5. Кроме того, я посмотрел на подключение к серверу с помощью веб-службы, но он не выглядит совместимым ине имеет WSDL.

Ниже приведен пример того, что ожидает SOAP-сервер для входящего запроса.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body>
<GetBasicData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="CRS610MI">
<CONO xmlns="">1</CONO>
<CUNO xmlns="">12345</CUNO>
</GetBasicData>
</soap:Body>
</soap:Envelope>

Вот как выглядит сериализованная XML-строка.

<?xml version="1.0" encoding="utf-8"?>
<GetBasicData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="CRS610MI">
<CONO xmlns="">1</CONO>
<CUNO xmlns="">12345</CUNO>
</GetBasicData>

Код, который я использую для моего веб-запроса и ответа.

Byte[] byteArray = System.Text.UTF8Encoding.UTF8.GetBytes(data);

WebRequest webRequest = WebRequest.Create(@"http://myserver:8888");
webRequest.ContentLength = byteArray.Length;
webRequest.ContentType = @"text/xml; charset=utf-8";
webRequest.Headers.Add("SOAPAction", @"http://schemas.xmlsoap.org/soap/envelope/");
webRequest.Method = "POST";

Stream requestStream = webRequest.GetRequestStream();
requestStream.Write(byteArray, 0, byteArray.Length);
requestStream.Close();
requestStream.Dispose();

WebResponse webResponse = webRequest.GetResponse();

Stream responseStream = webResponse.GetResponseStream();

StreamReader streamReader = new StreamReader(responseStream);

String line;

while ((line = streamReader.ReadLine()) != null)
{
    Debug.WriteLine(line);
}

Я проверил свой код, заменив мою сериализованную строку текстом в файле примера, предоставленном третьей стороной, и он работал как ожидалось. Я также взял свою сериализованную строку и вставил текст конверта в правильные места, и это также сработало, веб-запрос прошел, и я получил ответ, который искал. Если не считать вставки текста конверта в мою сериализованную строку вручную, что я могу сделать. Я должен представить, что есть метод или класс, который позаботится об этом для меня стандартизированным способом?

Ответы на вопрос(4)

Ваш ответ на вопрос