Префикс пространства имен отсутствует при запросе мыла через веб-ссылку - PullRequest
0 голосов
/ 30 мая 2018

Вот мои настройки, у меня есть файл WSDL, который я импортировал в свое приложение, и он создал ссылки, по которым я могу позвонить, чтобы сделать свой запрос.Все в порядке, за исключением того, что в запросе отсутствует префикс для пространств имен.Мой запрос выглядит так (перехвачено через SoapUI)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
  <ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
     <ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">
        <HDR>
           <MSG_TIMESTAMP>0001-01-01T00:00:00</MSG_TIMESTAMP>
           <CC>30H</CC>
           <STATE>CA</STATE>
        </HDR>
        <PON>TESTPON</PON>
     </ADDR_VAL_REQ>
  </ATT_ADDR_VAL_REQ>
</soap:Body>
</soap:Envelope>

Но удаленная система ожидает что-то вроде этого, ns1 и ns2 - просто префикс samlpe, может быть чем угодно

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
  <ns1:ATT_ADDR_VAL_REQ xmlns:ns1="http://lsr.att.com/preorder">
     <ns2:ADDR_VAL_REQ xmlns:ns2="http://lsr.att.com/obf/tML/UOM">
        <ns2:HDR>
           <ns2:MSG_TIMESTAMP>0001-01-01T00:00:00</ns2:MSG_TIMESTAMP>
           <ns2:CC>30H</ns2:CC>
           <ns2:STATE>CA</ns2:STATE>
        </ns2:HDR>
        <ns2:PON>TESTPON</ns2:PON>
     </ns2:ADDR_VAL_REQ>
  </ns1:ATT_ADDR_VAL_REQ>
</soap:Body>
</soap:Envelope>

Также простодля справки вот как выглядит ATT_ADDR_VAL_REQ

Partial Public Class ATT_ADDR_VAL_REQ

    Private aDDR_VAL_REQField As ADDR_VAL_REQ

    '''<remarks/>
    <System.Xml.Serialization.XmlElementAttribute([Namespace]:="http://lsr.att.com/obf/tML/UOM")>  _
    Public Property ADDR_VAL_REQ() As ADDR_VAL_REQ
        Get
            Return Me.aDDR_VAL_REQField
        End Get
        Set
            Me.aDDR_VAL_REQField = value
        End Set
    End Property
End Class

Так что мне интересно, есть ли место, где я могу настроить систему на использование префиксов пространства имен?

1 Ответ

0 голосов
/ 30 мая 2018

Ваш образец

<ns1:ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
  <ns2:ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">

не является допустимым документом XML, поскольку ns1 и ns2 не определены.Это выглядит так при использовании префиксов

<ns1:ATT_ADDR_VAL_REQ xmlns:ns1="http://lsr.att.com/preorder">
  <ns2:ADDR_VAL_REQ xmlns:ns2="http://lsr.att.com/obf/tML/UOM">

, но значение полностью совпадает с

<ATT_ADDR_VAL_REQ xmlns="http://lsr.att.com/preorder">
   <ADDR_VAL_REQ xmlns="http://lsr.att.com/obf/tML/UOM">

, поэтому запрос должен передаваться на стороне сервера.

Вы не можете повлиять на использование префиксов через настройки или атрибуты, которые я считаю.Для изменения вывода потребуется написать собственный сериализатор или какой-нибудь IEndpointBehavior + IClientMessageInspector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...