在vb.net soap客户端生成请求

时间:2012-03-03 14:42:26

标签: vb.net xsd wsdl soap-client

this link获取tripservice wsdl在这个wsdl中,我用下面的元素替换了from元素(添加了nillable为true并添加了min length和max length限制)。

<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 occurrence = 0),该元素是可选的。如何在没有from元素名称的情况下发送请求,甚至在请求中传递?

1 个答案:

答案 0 :(得分:1)

你不能;有趣的是找出你为什么把它改成nillable;在这样做的过程中,.NET代码生成的工作方式,让你无法知道它是否应该编组标签;通常,未编组的是null的可选字符串。可选(minOccurs = 0)和nillable将不起作用,因为没有“set”指示符(JAXB具有它或用于拥有它)以跟踪用户代码是否设置值,null或非null。