генерация запроса в мыльном клиенте vb.net - PullRequest
1 голос
/ 03 марта 2012

Возьмите wsdl tripservice из по этой ссылке В этом wsdl я заменил элемент from следующим (добавлен nillable как true и добавлено ограничение минимальной длины и максимальной длины).

<xs:element minOccurs="0" name="from" nillable="true">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:minLength value="1"/>
                <xs:maxLength value="12"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:element>

Теперь в моем клиенте vb.net я вызвал службу, добавив ссылку на службу, wsdl сохранен в локальной папке.

Dim objproxy As New Tripservice.TripPriceServiceFacadeClient
        Dim gh As New Tripservice.trip
        gh.adults = 9
        gh.duration = 8
        gh.rooms = 8
        gh.to = "p"
        objproxy.getTripPrice(gh)

Будет выброшена исключительная ситуация для конечной точки, однако меня интересует запрос xml. Я включил трассировку и обнаружил, что генерируется приведенный ниже запрос.

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <getTripPrice xmlns="http://trip.price.service">
         <trip xmlns="">
            <adults>9</adults>
            <duration>8</duration>
            <from xsi:nil="true"/>
            <rooms>8</rooms>
            <to>p</to>
         </trip>
      </getTripPrice>
   </s:Body>
</s:Envelope>

Элемент из xsi: nil = "true" генерируется, хотя я не касаюсь элемента в своем коде vb.net для генерации запроса. Элемент необязателен согласно wsdl (min происходит = 0). Как я могу отправить запрос без имени элемента from, даже переданного в запросе?

1 Ответ

1 голос
/ 03 марта 2012

Вы не можете;интересно узнать, почему вы изменили его на nillable;при этом, как работает генерация кода .NET, вы не оставляете возможность узнать, должен ли он маршалировать тег или нет;как правило, необязательная строка с нулевым значением не маршалируется.Необязательные (minOccurs = 0) и nillable не будут работать, поскольку отсутствует индикатор «set» (JAXB имеет или использует его), чтобы отслеживать, задан ли в пользовательском коде значение, ноль или нет.

...