Ratheeshrathan Ответов: 1

Как сгенерировать правильную оболочку soapenvelope из объекта класса api proxy?


Это один скопирована с soapui. Но когда я генерирую через код,как можно добавить обертку soap Envelope, теги заголовка и тела?

Что я уже пробовал:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:whol="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd" 
xmlns:stan="https://wsm.webservice.m2.com.au/schemas/StandardDataTypes.xsd">
<soapenv:Header/>
<soapenv:Body>
	<GetRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<AccessKey xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">MXANJVAUCAJASPH1</AccessKey>
	<ProductID xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">FIBRE</ProductID>
	<Scope xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">QUALIFY</Scope>
	<Parameters xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">
	<Param id="DirectoryID" xmlns="https://wsm.webservice.m2.com.au/schemas/StandardDataTypes.xsd">LOC100056097744</Param>
	<Param id="CVCID" xmlns="https://wsm.webservice.m2.com.au/schemas/StandardDataTypes.xsd">AggCVC000000015</Param>
	</Parameters>
	</GetRequest>
</soapenv:Body>
</soapenv:Envelope>

1 Ответов

Рейтинг:
0

David_Wimbley

Мое предложение состояло бы в том, чтобы изучить сериализацию. Для меня это самый простой путь, но вы также можете сделать что-то вроде Linq to XML или использовать XML Writer...но это входит в большой код.

Первое, что нужно сделать, это взять свое мыло/xml, перейти к Xml2CSharp.com | преобразуйте ваши XML-примеры в совместимые классы C# XmlSerializer[^]

и создайте классы, которые представляют ваш конверт soap.

Затем, используя созданные классы, вы можете создавать объекты, представляющие части вашего конверта, и присваивать значения, как и любой другой переменной в коде.

var env = new Envelope();
            env.Body = new Body();
            env.Body.GetRequest = new GetRequest();
            env.Body.GetRequest.AccessKey = new AccessKey();
            env.Body.GetRequest.Parameters  = new Parameters();
            env.Body.GetRequest.Parameters.Param = new List<Param>();
            env.Body.GetRequest.ProductID =  new ProductID();
            env.Body.GetRequest.Scope = new Scope();

            env.Body.GetRequest.Xsi = "http://www.w3.org/2001/XMLSchema-instance";
            env.Body.GetRequest.Xsd = "http://www.w3.org/2001/XMLSchema";

            env.Body.GetRequest.AccessKey.Text = "MXANJVAUCAJASPH1";
            env.Body.GetRequest.ProductID.Text = "FIBRE";
            env.Body.GetRequest.Scope.Text = "QUALIFY";


            env.Body.GetRequest.Parameters.Param.Add(new Param()
            {
                Id = "DirectoryID",
                Text = "LOC100056097744",
                Xmlns = ""
            });

            env.Body.GetRequest.Parameters.Param.Add(new Param()
            {
                Id = "CVCID",
                Text = "AggCVC000000015",
                Xmlns = ""
            });



            var xmlString = string.Empty;
            XmlSerializer xmlSerializer = new XmlSerializer(env.GetType());

            using(StringWriter textWriter = new StringWriter())
            {
                xmlSerializer.Serialize(textWriter, env);
                xmlString = textWriter.ToString();
            }

            Console.WriteLine(xmlString);


Я не включаю классы для конверта, так как вы можете получить их с сайта xml2csharp и скопировать/вставить в свое приложение.

Но выше, получает следующий XML-код, когда он сериализуется

<?xml version="1.0" encoding="utf-16"?>
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/soap/envelope/">
  <Body>
    <GetRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <AccessKey xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">MXANJVAUCAJASPH1</AccessKey>
      <ProductID xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">FIBRE</ProductID>
      <Scope xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">QUALIFY</Scope>
      <Parameters xmlns="https://wsm.webservice.m2.com.au/schemas/WholesaleServiceManagement.xsd">
        <Param id="DirectoryID" xmlns="https://wsm.webservice.m2.com.au/schemas/StandardDataTypes.xsd">LOC100056097744</Param>
        <Param id="CVCID" xmlns="https://wsm.webservice.m2.com.au/schemas/StandardDataTypes.xsd">AggCVC000000015</Param>
      </Parameters>
    </GetRequest>
  </Body>
</Envelope>