2012-04-20 98 views
1

我一直在嘗試使用WSDL文件爲Apache Axis SOAP Web服務生成VB.NET中的Proxy類。如何使用WSDL文件在.NET中創建代理類?

他們爲我提供了WSDL文件,當我使用WSDL.exe命令(在Visual Studio 08中)並將它指向本地路徑時,我收到一個錯誤消息。

wsdl /language:vb c:\Orders.wsdl 

(我想創建消耗託管Apache Axis的2 SOAP Web服務.NET客戶端)如果我使用SvcUtil工具

的錯誤

Unable to import binding 'OrdersSoapBinding' from namespace 'urn:company:orders:schemas:OrderTypes:1.00'. 

-Unable to import operation 'placeOrder' 

-The element 'urn:company:remtp:schemas:PlaceOrderRequest:1.00:PlaceOrderRequest' is missing 

if you would like more help, please type 'wsdl /?' 

。 exe我也收到一條錯誤信息...

svcutil.exe C:\Orders.wsdl /t:code /l:VB /o:"C:\Orders.VB" 

什麼是causi這個問題呢?

您的幫助將不勝感激,謝謝。

WSDL代碼

<?xml version="1.0" encoding="UTF-8"?> 

<wsdl:definitions 
     targetNamespace="urn:company:orders:schemas:OrderTypes:1.00" 
     xmlns:impl="urn:company:orders:schemas:OrderTypes:1.00" 
     xmlns:apachesoap="http://xml.apache.org/xml-soap" 
     xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 

     xmlns:poreq="urn:company:remtp:schemas:PlaceOrderRequest:1.00" 
     xmlns:poresp="urn:company:remtp:schemas:PlaceOrderResponse:1.00" 
     xmlns:coreq="urn:company:remtp:schemas:CommitOrderRequest:1.00" 
     xmlns:coresp="urn:company:remtp:schemas:CommitOrderResponse:1.00" 
     xmlns="http://schemas.xmlsoap.org/wsdl/"> 

     <wsdl:types> 
       <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:company:orders:schemas:OrderTypes:1.00"> 
     <import namespace="urn:company:remtp:schemas:PlaceOrderRequest:1.00" schemaLocation="../schemas/placeOrderRequest.xsd"/> 

     <import namespace="urn:company:remtp:schemas:PlaceOrderResponse:1.00" schemaLocation="../schemas/placeOrderResponse.xsd"/> 

     <import namespace="urn:company:remtp:schemas:CommitOrderRequest:1.00" schemaLocation="../schemas/commitOrderRequest.xsd"/> 

     <import namespace="urn:company:remtp:schemas:CommitOrderResponse:1.00" schemaLocation="../schemas/commitOrderResponse.xsd"/> 

     </schema> 

     </wsdl:types> 

     <wsdl:message name="placeOrderRequest"> 
     <wsdl:part element="poreq:PlaceOrderRequest" name="parameters"/> 
     </wsdl:message> 

     <wsdl:message name="placeOrderResponse"> 
       <wsdl:part element="poresp:PlaceOrderResponse" name="parameters"/> 
     </wsdl:message> 

     <wsdl:message name="commitOrderRequest"> 
       <wsdl:part element="coreq:CommitOrderRequest" name="parameters"/> 
     </wsdl:message> 

     <wsdl:message name="commitOrderResponse"> 
       <wsdl:part element="coresp:CommitOrderResponse" name="parameters"/> 
     </wsdl:message> 

     <wsdl:portType name="Orders"> 

       <wsdl:operation name="placeOrder"> 
         <wsdl:input message="impl:placeOrderRequest"/> 
         <wsdl:output message="impl:placeOrderResponse"/> 
       </wsdl:operation> 

       <wsdl:operation name="commitOrder"> 
         <wsdl:input message="impl:commitOrderRequest"/> 
         <wsdl:output message="impl:commitOrderResponse"/> 
       </wsdl:operation> 

     </wsdl:portType> 

     <wsdl:binding name="OrdersSoapBinding" type="impl:Orders"> 
       <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 

       <wsdl:operation name="placeOrder"> 
         <wsdlsoap:operation soapAction=""/> 

         <wsdl:input name="placeOrderRequest"> 
           <wsdlsoap:body use="literal" /> 
         </wsdl:input> 

         <wsdl:output name="placeOrderResponse"> 
           <wsdlsoap:body use="literal" /> 
         </wsdl:output> 

       </wsdl:operation> 

       <wsdl:operation name="commitOrder"> 
         <wsdlsoap:operation soapAction=""/> 

         <wsdl:input name="commitOrderRequest"> 
           <wsdlsoap:body use="literal" /> 
         </wsdl:input> 

         <wsdl:output name="commitOrderResponse"> 
           <wsdlsoap:body use="literal" /> 
         </wsdl:output> 

       </wsdl:operation> 

     </wsdl:binding> 

     <wsdl:service name="OrdersService"> 
       <wsdl:port name="Orders" binding="impl:OrdersSoapBinding"> 
         <wsdlsoap:address location="https://companyorders.co.uk/endpoints/services/Orders"/> 
       </wsdl:port> 
     </wsdl:service> 

</wsdl:definitions> 

回答

3

展望您提供的WSDL文件,你會看到四個XSD引用(XML文檔xchema)文件:它們包含由SvcUtil工具需要的類型定義和驗證規則創建代理。

<import namespace="urn:company:remtp:schemas:PlaceOrderRequest:1.00" schemaLocation="../schemas/placeOrderRequest.xsd"/> 

    <import namespace="urn:company:remtp:schemas:PlaceOrderResponse:1.00" schemaLocation="../schemas/placeOrderResponse.xsd"/> 

    <import namespace="urn:company:remtp:schemas:CommitOrderRequest:1.00" schemaLocation="../schemas/commitOrderRequest.xsd"/> 

    <import namespace="urn:company:remtp:schemas:CommitOrderResponse:1.00" schemaLocation="../schemas/commitOrderResponse.xsd"/> 

所以,你需要這些XSD文件太

+0

我問他們提供我XSD文檔。有沒有辦法爲這些命名空間創建我自己的xsd文檔? – nimblebit 2012-04-20 15:37:54

+0

沒辦法。即。 xsd告訴你消息impl的結構:placeOrderRequest:你怎麼能以一致的方式用提供的服務創建xsd而不知道這個結構?這就是你需要這些文件的原因。 – paolo 2012-04-21 07:58:53

+0

好吧,我終於得到了xsd文件,我可以通過將xsd路徑傳入wsdl.exe命令提示符來生成代理類。它很好地生成了它。謝謝您的幫助。 – nimblebit 2012-05-01 14:23:13

相關問題