@MagDarkElf

Почему MessageContract не принимает значения с префиксами?

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
      <wsa:To>123@ctr</wsa:To>
      <wsa:From>
         <wsa:Address>321@ctr</wsa:Address>
      </wsa:From>
      <wsa:MessageID>urn:uuid:330ee93a-8a42-4ac7-bbfa-fa9636e8d75c</wsa:MessageID>
      <wsa:RelatesTo>urn:uuid:1c4d8d00-9dce-43dc-aacd-61f20d9e98d6</wsa:RelatesTo>
      <wsa:Action>sm://messages/application/some/response</wsa:Action>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <openIncidentsResponse xmlns:ns2="http://www..ru/sc/schema/pm">
         <ns2:OpenIncidentsCount>1</ns2:OpenIncidentsCount>
         <ns2:UserId>a6275872-74f3-4bf2-bd17-3147ca4ad9a2</ns2:UserId>
         <ns2:LastDate>2020-01-27T11:51:07.3516144+03:00</ns2:LastDate>
      </openIncidentsResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Soap сообщение не сериализуется из-за префикса ns2
Как нужно настроить атрибуты класса для того что бы всё корректно сериализовалось
[MessageContract(IsWrapped = false)]
public partial class OpenIncidentsResponseMessage
{
  protected static string prefix = "urn:uuid:";

  [XmlIgnore]
  public Guid MessageId
  {
    get
    {
      String cut;
      if (MessageIdSer.StartsWith(prefix, true, CultureInfo.InvariantCulture))
      {
        cut = MessageIdSer.Substring(prefix.Length);
      }
      else
      {
        cut = MessageIdSer;
      }
      return Guid.Parse(cut);
    }
    set
    {
      MessageIdSer = prefix + value;
    }
  }

  [MessageHeader(Namespace = "http://www.w3.org/2005/08/addressing", Name = "MessageID")]
  public String MessageIdSer
  {
    get;
    set;
  }

  [MessageHeader(Namespace = "http://www.w3.org/2005/08/addressing")]
  public String To { get; set; }

  [MessageBodyMember(Name = "openIncidentsResponse", Namespace = "http://www..ru/sc/schema/pm", Order = 0)]
  public openIncidentsResponse openIncidentsResponse;
}

public partial class openIncidentsResponse
{
        [MessageBodyMember(Namespace = "http://www..ru/sc/schema/pm", Order = 0)]
        public int OpenIncidentsCount;

        [MessageBodyMember(Namespace = "http://www..ru/sc/schema/pm", Order = 1)]
        public Guid UserId;

        [MessageBodyMember(Namespace = "http://www..ru/sc/schema/pm", Order = 2)]
        public DateTime LastDate;
}
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы