1
從this link中獲取tripservice wsdl在此wsdl中,我將下面的元素替換爲(添加nillable爲true並添加了最小長度和最大長度限制)。vb.net soap客戶端請求生成
<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的元件:無=「真」被生成,即使我沒有接觸元件在我vb.net代碼來生成所述請求。根據wsdl(min occurrence = 0),元素是可選的。我如何發送請求而不使用來自元素名稱的請求?
在接受請求xml的Web服務中,根據標記是否存在以及它是否爲nillable = true來執行一些處理。然而,如果不改變,請求總是伴隨着這種行爲。 – Suresh 2012-03-03 16:41:30
@Suresh,我發現合同中的一個奇怪的事情是,一次旅行的價格可能不包括*,*和a *到*。因爲這些是可選的(?!),服務的文檔應該告訴你,如果其中一個或另一個或兩者缺失,行爲應該是什麼。我會聯繫服務所有者。還有一條建議:在任何情況下,合同的修改方式都不應該與原來的一致(引進的可能是兼容的,但不是一致的);有時需要XML Schema重構來適應工具,但在你的情況下,我不明白爲什麼你會擺弄它... – 2012-03-03 18:34:24