从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元素名称的情况下发送请求,甚至在请求中传递?
答案 0 :(得分:1)
你不能;有趣的是找出你为什么把它改成nillable;在这样做的过程中,.NET代码生成的工作方式,让你无法知道它是否应该编组标签;通常,未编组的是null的可选字符串。可选(minOccurs = 0)和nillable将不起作用,因为没有“set”指示符(JAXB具有它或用于拥有它)以跟踪用户代码是否设置值,null或非null。