Мне нужно вызвать веб-сервис из-за отсутствия программы на C #. Веб-сервис, скорее всего, не стандартный формат. Описание интерфейса (wsdl и xsd) очень сложное, и использование механизма генерации прокси приводит к сотням классов. Сгенерированные классы мало помогают, поскольку они очень универсальны и имеют в основном простые типы объектов в качестве членов. Лучший вариант - создать сообщение SOAP вручную. Это также способ, которым поставщик веб-услуг предложил выбрать: взять сообщения мыла / xml, которые необходимо отправить, и построить сообщение в соответствии с шаблоном. Теперь вопрос в том, как построить сообщение наиболее эффективно. Конечно, жесткое кодирование строки сообщения - это вариант, однако мне интересно, существуют ли лучшие варианты. Если у меня есть полное сообщение в строке, как мне лучше всего отправить сообщения. Должен ли я использовать простой HttpRequest или я могу использовать механизмы стека wcf?
Мой текущий подход к созданию сообщения выглядит так:
string msg = envelopeBegin;
RouteType rootType = new RouteType();
XmlSerializer serializer = new XmlSerializer(typeof(RouteType));
StringWriter stringWriter = new StringWriter();
serializer.Serialize(stringWriter, rootType , customNamespace);
msg += stringWriter.ToString();
msg += envelopeEnd;
// Отправить сообщение по сети
Сообщение Soap / xml, которое я должен сгенерировать, выглядит следующим образом
<env:Envelope>xmlns:env=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://www.skanska.se/oagis/9/ws/faults">
<env:Body>
<ska:ShowSalesOrder xmlns:ska="http://www.skanska.se/oagis/9" systemEnvironmentCode="UTV" versionID="1.0" releaseID="9.0">
<!--plsql=.74s-->
<ApplicationArea xmlns="http://www.openapplications.org/oagis/9">
<!--user_name=SEBA_RAPPE-->
<ska:Sender>
<LogicalID>OEBS_SE</LogicalID>
<ComponentID>SKAIS017I</ComponentID>
<AuthorizationID>SEBA_RAPPE</AuthorizationID>
<ska:ResponsibilityID>XXOM_INTEGRATION_SVT</ska:ResponsibilityID>
</ska:Sender>
<CreationDateTime>2010-02-26T15:03:27+01:00</CreationDateTime>
<BODID>xxxxxxxxxxxxxxxxx</BODID>
</ApplicationArea>
<ska:DataArea>
<Show xmlns="http://www.openapplications.org/oagis/9">
<ResponseCriteria>
<ResponseExpression actionCode="Never" expressionLanguage="xPath">*</ResponseExpression>
</ResponseCriteria>
</Show>
<ska:SalesOrder>
<SalesOrderHeader xmlns="http://www.openapplications.org/oagis/9">
<DocumentID>
<ID>141779</ID>
</DocumentID>
<RequestedShipDateTime>2009-11-04T07:00:54+01:00</RequestedShipDateTime>
</SalesOrderHeader>
</ska:SalesOrder>
</ska:DataArea>
</ska:ShowSalesOrder>
</env:Body>
</env:Envelope>