2012-03-03 82 views
1

tripservice wsdlをthis linkから取るこのwsdlでは、from要素を以下のものに置き換えました(nillableにtrueを加え、min長さとmax lengthの長さの制限を追加しました)。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から要素

:nilを=「true」が、私は要求を生成するために私vb.netコード内の要素に触れていない午前にもかかわらず、生成されます。この要素は、wsdl(min occur = 0)ごとにオプションです。どのようにすれば、要素名からの要求を送らずに要求を渡すことができますか?

答えて

1

できません。あなたがなぜそれをnillableに変更したのかを知ることは面白いです。そうすることで、.NETコード生成の仕方、タグをマーシャルする必要があるかどうかを知ることはできません。通常、nullのオプション文字列はマーシャリングされません。オプションの(minOccurs = 0)とnillableは、ユーザーコードが値を設定するかどうかを追跡するための "set"インジケータ(JAXBが持っているか、または持っている)がないため、機能しません。

+0

要求xmlを受け入れるWebサービスでは、タグが存在し、それがnillable = trueである場合に基づいて処理を行います。ただし、手を触れていなければ、この要求に常に従います。 – Suresh

+0

@ Suresh、私はそれが旅行から* a *とa *への*なしで値段をつけることができるということが奇妙なことを契約で見つける。これらはオプションなので(?!)、サービスのドキュメントは、どちらか一方または両方が欠落している場合の動作を教えてください。私はサービスの所有者に連絡します。もう1つのアドバイス:いかなる場合でも、契約は元のものと一致しない方法で変更されるべきです(nillableの導入は互換性がありますが、合同ではありません)。 XMLスキーマのリファクタリングがツールに必要な場合がありますが、あなたの場合、なぜそれを使っているのかわかりません... –

関連する問題