2010-06-07 30 views
6

我正在使用BizTalk 2006 R2從WSDL文件生成Web引用。BizTalk Web引用 - 生成的XSD具有來自WSDL的「丟失」信息

將生成的XSD與WSDL進行比較,很明顯很多信息已經丟失。

考慮以下摘自WSDL:

<s:element form="unqualified" minOccurs="0" maxOccurs="4" name="Applicant"> 
    <s:complexType> 
    <s:sequence> 
     <s:element form="unqualified" minOccurs="1" maxOccurs="1" name="ApplicantIdentifier"> 
     <s:simpleType> 
      <s:restriction base="s:string" /> 
     </s:simpleType> 
     </s:element> 
     <s:element form="unqualified" minOccurs="0" maxOccurs="1" name="Name"> 
     <s:complexType> 
      <s:sequence> 
      <s:element form="unqualified" minOccurs="0" maxOccurs="1" name="Title"> 
       <s:simpleType> 
       <s:restriction base="s:string"> 
        <s:maxLength value="10" /> 
       </s:restriction> 
       </s:simpleType> 
      </s:element> 
      <s:element form="unqualified" minOccurs="0" maxOccurs="1" name="Forename"> 
       <s:simpleType> 
       <s:restriction base="s:string"> 
        <s:pattern value="[0-9A-Za-z \-]*" /> 
        <s:maxLength value="15" /> 
        <s:minLength value="1" /> 
       </s:restriction> 
       </s:simpleType> 
      </s:element> 
      <!-- more --> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 
    </s:sequence> 
    </s:complexType> 
</s:element> 

其中的BizTalk已經產生的等效XSD是:

<xs:element minOccurs="0" maxOccurs="unbounded" form="unqualified" name="Applicant"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="ApplicantIdentifier" type="xs:string" /> 
     <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Name"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Title" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="Forename" type="xs:string" /> 
      <!-- more --> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

因此,XSD已經失去了約束的模式,並已建立了自己的價值爲minOccurs和maxOccurs。

我需要從另一個源映射到XSD,我希望在該階段捕獲不符合WSDL的數據。

有誰知道爲什麼BizTalk沒有保留XSD中的限制;或者我如何生成無損XSD?

+0

使用Xsd.exe會產生相同的結果嗎? – TEEKAY 2010-06-16 14:07:47

+0

謝謝你的建議,TEEKAY。 當我在WSDL文件中指出xsd.exe時: xsd.exe「C:\ Demos \ MyProblem.wsdl」/ o:「C:\ Demos」 我收到錯誤「Error:invalid command line argument:' 「C:\ Demos \ MyProblem.xsd」/ o:「C:\ Demos」 我得到了錯誤:「錯誤:只能生成一個類或數據集。」 無論如何感謝您的建議。 – 2010-06-17 09:30:47

回答

1

除非你正在做的模式驗證在BizTalk管道,限制和maxOccurs> 1實際上並不打算做任何事情 - 他們不是在運行時由BizTalk使用。我猜這就是爲什麼Web引用是有損的。

我個人從來不喜歡'添加web引用'功能,甚至'添加適配器元數據'/ WCF。如果您的wsdl頻繁更改手動將類型定義複製到xsd文件中工作太多:

a)查看構建一個簡單的控制檯應用程序以檢索wsdl,提取類型並更新xsd文件(從VS的「外部工具」菜單中啓動它)和

b)解決您的開發流程出了什麼問題,需要經常更改服務合同!