delphi import 服务端提供的WSDL后,生成function  requestCreate(const parameters: requestCreate): requestCreateResponse; stdcall;
运行后,提示requestCreate参数没有定义,不知道生成的这种方法怎么用?
请各位大侠帮帮忙!小弟急死了...................................

解决方案 »

  1.   

    你在uses里有没有加上那个单元?
      

  2.   

    requestCreate 是你自定义的东西,需要注册的,看看demo
      

  3.   

    requestCreate 参数是对方定义的,但是导入对方的WSDL以后只有这些function  requestCreate(const parameters: requestCreate): requestCreateResponse; stdcall; 
    没有具体的requestCreate的参数的定义!不知道这些参数的定义需要怎么搞?
      

  4.   

    在wsdl中最好不要这样使用,如果是同语言编写的程序,你还可以自定义类型,因为你有类型的结构,各语言对类呀,结构呀,定义的都不一样,最多只有基础数据类型是大家都支持的,最好是使用字符窜,定义为xml格式,双方各做解析,我一直都是这样干的
      

  5.   

    但是DElphi导入WSDL以后确实是这种的,不知道你说的定义为XML格式是什么意思?
      

  6.   

    就是说参数类型为字符窜,
    内容是xml报文。
      

  7.   

    正常应该会根据wsdl文件生成对应的参数类的吧,
    可能对方定义的wsdl中自定义参数部分有误,导致无法生成对应的参数类
      

  8.   

    所有语言开发wsdl都回有你说的这个问题,你定义了一个参数,这个参数的类型不是基础数据类型(string,int,bool)呀,只有基础数据类型才会自动地生成相应的对应的代码,但是requestCreate到底是什么,只有定义者知道,市级上soap的传输是基于string的,但是转换又是开发工具或者编译器自动代码生成的,所以2方的开发很难对参数进行统一和维护,因为这个转换是不透明的,如果自己使用string,定义xml的格式,大家各干各的,这样是没啥么问题,参数传递过来就是个string,你再装在入xml解析器里解析,这就好比以前vc调用delhi的动态库,大家都用pchar传递,你定义个TObject,vc里面没有,如何使用,随意大部分vc的dll只能vc程序调用,dll的dll只能delphi调用,在soap里面,所有的通讯都是通过http协议,以传递string的方式进行的,只不过string里面按照xml的格式传送的,wsdl就是关于xml格式的约定,你需要调用什么方法,传递什么参数,等等
      

  9.   

    定义为xml格式,怎么定义啊?不是很明白!能不能说的具体些,要不我把对方的WSDL文件发过来,你们给看看吧!实在不行,我就准备用GSOAP开发!(我分几部分发)
      

  10.   

      <?xml version="1.0" encoding="UTF-8" ?> 
    - <wsdl:definitions xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://alcatel.pl/soserver/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="SOServer" targetNamespace="http://alcatel.pl/soserver/" xmlns="http://alcatel.pl/soserver/">
    - <wsdl:types>
    - <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://alcatel.pl/soserver/" targetNamespace="http://alcatel.pl/soserver/" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns="http://alcatel.pl/soserver/">
      <xs:include schemaLocation="core.xsd" /> 
      </xs:schema>
      </wsdl:types>
    - <wsdl:message name="requestModifyConfigResponse">
      <wsdl:part element="tns:requestModifyConfigResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestGetResponse">
      <wsdl:part element="tns:requestGetResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestCreateResponse">
      <wsdl:part element="tns:requestCreateResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestConfigureRequest">
      <wsdl:part element="tns:requestConfigure" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestDeleteRequest">
      <wsdl:part element="tns:requestDelete" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestUnConfigureResponse">
      <wsdl:part element="tns:requestUnConfigureResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestUnConfigureRequest">
      <wsdl:part element="tns:requestUnConfigure" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="ErrorMessageType">
      <wsdl:part element="tns:fault" name="fault" /> 
      </wsdl:message>
    - <wsdl:message name="requestConfigureResponse">
      <wsdl:part element="tns:requestConfigureResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestModifyResponse">
      <wsdl:part element="tns:requestModifyResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestCreateRequest">
      <wsdl:part element="tns:requestCreate" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestDeleteResponse">
      <wsdl:part element="tns:requestDeleteResponse" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestModifyRequest">
      <wsdl:part element="tns:requestModify" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestModifyConfigRequest">
      <wsdl:part element="tns:requestModifyConfig" name="parameters" /> 
      </wsdl:message>
    - <wsdl:message name="requestGetRequest">
      <wsdl:part element="tns:requestGet" name="parameters" /> 
      </wsdl:message>
    - <wsdl:portType name="SOServer">
    - <wsdl:operation name="requestCreate">
      <wsdl:input message="tns:requestCreateRequest" name="requestCreateRequest" /> 
      <wsdl:output message="tns:requestCreateResponse" name="requestCreateResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
    - <wsdl:operation name="requestDelete">
      <wsdl:input message="tns:requestDeleteRequest" name="requestDeleteRequest" /> 
      <wsdl:output message="tns:requestDeleteResponse" name="requestDeleteResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
    - <wsdl:operation name="requestModify">
      <wsdl:input message="tns:requestModifyRequest" name="requestModifyRequest" /> 
      <wsdl:output message="tns:requestModifyResponse" name="requestModifyResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
    - <wsdl:operation name="requestModifyConfig">
      <wsdl:input message="tns:requestModifyConfigRequest" name="requestModifyConfigRequest" /> 
      <wsdl:output message="tns:requestModifyConfigResponse" name="requestModifyConfigResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
    - <wsdl:operation name="requestGet">
      <wsdl:input message="tns:requestGetRequest" name="requestGetRequest" /> 
      <wsdl:output message="tns:requestGetResponse" name="requestGetResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
      

  11.   

    - <wsdl:operation name="requestConfigure">
      <wsdl:input message="tns:requestConfigureRequest" name="requestConfigureRequest" /> 
      <wsdl:output message="tns:requestConfigureResponse" name="requestConfigureResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
    - <wsdl:operation name="requestUnConfigure">
      <wsdl:input message="tns:requestUnConfigureRequest" name="requestUnConfigureRequest" /> 
      <wsdl:output message="tns:requestUnConfigureResponse" name="requestUnConfigureResponse" /> 
      <wsdl:fault message="tns:ErrorMessageType" name="ErrorMessageType" /> 
      </wsdl:operation>
      </wsdl:portType>
    - <wsdl:binding name="SOServerSOAP" type="tns:SOServer">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
    - <wsdl:operation name="requestCreate">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestCreateRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestCreateResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
    - <wsdl:operation name="requestDelete">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestDeleteRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestDeleteResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
    - <wsdl:operation name="requestModify">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestModifyRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestModifyResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
    - <wsdl:operation name="requestModifyConfig">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestModifyConfigRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestModifyConfigResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
    - <wsdl:operation name="requestGet">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestGetRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestGetResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
    - <wsdl:operation name="requestConfigure">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestConfigureRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestConfigureResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
    - <wsdl:operation name="requestUnConfigure">
      <wsdlsoap:operation soapAction="" /> 
    - <wsdl:input name="requestUnConfigureRequest">
      <wsdlsoap:body use="literal" /> 
      </wsdl:input>
    - <wsdl:output name="requestUnConfigureResponse">
      <wsdlsoap:body use="literal" /> 
      </wsdl:output>
    - <wsdl:fault name="ErrorMessageType">
      <wsdlsoap:fault name="ErrorMessageType" use="literal" /> 
      </wsdl:fault>
      </wsdl:operation>
      </wsdl:binding>
    - <wsdl:service name="SOServer">
    - <wsdl:port binding="tns:SOServerSOAP" name="SOServerSOAP">
      <wsdlsoap:address location="http://localhost:8080/axis/services/SOServerSOAP" /> 
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>
      

  12.   

    <xs:include schemaLocation="core.xsd" />core.xsd才是他的类型的描述
    首先,你要了解1个问题,多方也是用delphi做的吗,如果是,好极了,你只要把它的类定义文件源码要来就可以了,具体请参照Demos\ebServices\OAPAttachments\choService.bpg
    如果不是用delphi写的,那你就要研究core.xsd的定义,看看是如何定义的,仿照上面的例子从TRemotable继承下来,自己做xml的解析,不过看你这个配置文件,好像定义了好几个类型
      

  13.   

      // ************************************************************************ //
      // The following types, referred to in the WSDL document are not being represented
      // in this file. They are either aliases[@] of other types represented or were referred
      // to but never[!] declared in the document. The types from the latter category
      // typically map to predefined/known XML or Borland types; however, they could also
      // indicate incorrect WSDL documents that failed to declare or import a schema type.
      // ************************************************************************ //
      // !:requestCreate   - "http://alcatel.pl/soserver/"
      // !:requestCreateResponse - "http://alcatel.pl/soserver/"
      // !:fault           - "http://alcatel.pl/soserver/"
      // !:requestDelete   - "http://alcatel.pl/soserver/"
      // !:requestDeleteResponse - "http://alcatel.pl/soserver/"
      // !:requestModify   - "http://alcatel.pl/soserver/"
      // !:requestModifyResponse - "http://alcatel.pl/soserver/"
      // !:requestModifyConfig - "http://alcatel.pl/soserver/"
      // !:requestModifyConfigResponse - "http://alcatel.pl/soserver/"
      // !:requestGet      - "http://alcatel.pl/soserver/"
      // !:requestGetResponse - "http://alcatel.pl/soserver/"
      // !:requestConfigure - "http://alcatel.pl/soserver/"
      // !:requestConfigureResponse - "http://alcatel.pl/soserver/"
      // !:requestUnConfigure - "http://alcatel.pl/soserver/"
      // !:requestUnConfigureResponse - "http://alcatel.pl/soserver/"
      

  14.   

    提示的已经很清楚了,wsdl里面缺少一些类型定义,
    先保证你能访问http://alcatel.pl/soserver/这个网址
    如果没法保证,你得像LS说的,从TRemotable继承,手动写这些类型定义
      

  15.   

    http://alcatel.pl/soserver/是不用去访问的,这个只是命名空间
    <xs:include schemaLocation="core.xsd" /> 
    主要是找到上面这个文件core.xsd,这个对方是应该会提供给你的,找到定义文件在翻译成delphi可以识别的类型就可以了
      

  16.   

    哦,core.xsd确实是提供了,用Delphi导入的WSDL文件后,有的类型还需要自己重新去定义啊?有没有个能导入XSD文件的?