Ответ 1
Похоже, вы пытаетесь вызвать веб-службу с настраиваемым заголовком безопасности. Обычно самый простой способ сделать это - создать набор прокси-классов из WSDL целевого веб-сервиса.
Либо
- Щелкните правой кнопкой мыши по ссылке Добавить ссылку на службу/Добавить веб-ссылку из Visual Studio
- Или, если у вас есть файлы WSDL и xsd службы, используйте инструмент командной строки wsdl.exe (например,
wsdl.exe *.wsdl *.xsd //language:c#
) - См. здесь о том, как установить информацию о безопасности на ws: заголовок безопасности
Однако, если вы на 100% уверены, что вам нужно получить точный soapEnv Xml
выше, я бы предложил вам сохранить код "как есть" (т.е. просто сериализуйте MyObject в формате по умолчанию, используя XmlSerializer
или DataContractSerializer
), а затем используйте XslCompiledTransform.
Этот XSLT выполнит именно это:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/MyObject">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:smag="http://targetaddress.com/">
<soapenv:Header>
<Account>
<username><xsl:value-of select="Account/username"/></username>
<password><xsl:value-of select="Account/password"/></password>
</Account>
</soapenv:Header>
<soapenv:Body>
<smag:myobjinfos>
<destAdd><xsl:value-of select="destAdd"/></destAdd>
<Time><xsl:value-of select="Time"/></Time>
<maxNumb><xsl:value-of select="maxNumb"/></maxNumb>
</smag:myobjinfos>
</soapenv:Body>
</soapenv:Envelope> </xsl:template>
</xsl:stylesheet>
Преобразование
<?xml version="1.0"?>
<MyObject>
<destAdd>Destination</destAdd>
<Time>128</Time>
<maxNumb>99</maxNumb>
<Account>
<username>user</username>
<password>pass</password>
</Account>
</MyObject>
Для этого:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:smag="http://targetaddress.com/">
<soapenv:Header>
<Account>
<username>user</username>
<password>pass</password>
</Account>
</soapenv:Header>
<soapenv:Body>
<smag:myobjinfos>
<destAdd>Destination</destAdd>
<Time>128</Time>
<maxNumb>99</maxNumb>
</smag:myobjinfos>
</soapenv:Body>
</soapenv:Envelope>