2012-04-20 102 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

相关问题