Изменить префикс XML-тега SOAP - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь создать сообщение SOAP с префиксом.Однако у меня возникают проблемы с правильной настройкой пространства имен.Я пытался в течение нескольких дней и перепробовал много предложений, которые я нашел в Интернете, но ни одно из них не работает.Я надеюсь, что некоторые из вас могут мне помочь.Я получаю

<?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:Body>
    <Transaction xmlns="http://tempuri.org/">
      <bankingTransaction>
        <operation parameterOrder="string">
          <fault />
          <fault />
        </operation>
        <transactionDate>dateTime</transactionDate>
        <amount>int</amount>
      </bankingTransaction>
    </Transaction>
  </soap:Body>
</soap:Envelope>

и мне действительно нужно

<?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:Body>
    <res:Transaction xmlns="res:http://tempuri.org/">
      <res:bankingTransaction>
        <res:operation parameterOrder="string">
          <res:fault />
          <res:fault />
        </res:operation>
        <res:transactionDate>dateTime</res:transactionDate>
        <res:amount>int</res:amount>
      </res:bankingTransaction>
    </res:Transaction>
  </soap:Body>
</soap:Envelope>

& Мой MassageContact

[MessageContract]
public class BankingTransaction
{
   [MessageHeader] public Operation operation;
   [MessageHeader] public DateTime transactionDate;
   [MessageBodyMember] private unit sourceAccount;
   [MessageBodyMember] public int amount;
}

ПожалуйстаПомогите мне добавить префикс с моими элементами XML.Спасибо

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Мы могли бы создать MessageFormatter для настройки формата сообщения, вы можете обратиться к следующему официальному учебнику.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/extending/custom-message-formatters
Вот пример того, как это сделать.
https://stackoverflow.com/questions/31595770/c-sharp-wcf-global-namespaces-royal-mail/31597758#31597758
http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix

0 голосов
/ 15 ноября 2018

Возможно, вам нужно сделать что-то вроде этого:

[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://tempuri.org/")]
[MessageContract]
public class BankingTransaction
{
   [MessageHeader] public Operation operation;
   [MessageHeader] public DateTime transactionDate;
   [MessageBodyMember] private unit sourceAccount;
   [MessageBodyMember] public int amount;
}

Я не уверен, как вы сериализуете ваши объекты, но что-то вроде этого добавит префикс:

   XmlSerializerNamespaces x = new XmlSerializerNamespaces();
    x.Add("res", "http://tempuri.org/");

добавить XmlSerializerNamespaces к вам процесс сериализации может быть?Трудно сказать, не видя, что еще ты делаешь.Все ваши контракты / классы в этом пространстве имен, вероятно, нуждаются в этом атрибуте: [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://tempuri.org/")]

...