请问:delphi开发的Web Service是不是都需要IIS?
如果有不需要IIS的怎样开发?先谢了!

解决方案 »

  1.   

    使用DELPHI编WEB Service程序要完成以下步骤:
    服务器端:
    1、以New->Web Service->Soap Server Application新建一个程序,此时有一个project1.pas和unit1.pas;
    系统自动建立一个WEBModule页,该页包含三个控件:THTTPSoapDispatcher、THTTPSoapPascalInvoker和TWSDLHTMLPublish。
    下面分别介绍一下这三个控件的作用:
    THTTPSoapDispatcher负责接收从客户端发来的HTTP(SOAP)请求并负责将生成的结果回复给客户端
    THTTPSoapPascalInvoker是您的Web Service架构中最重要的模块。它负责分析从THTTPSoapDispatcher传来的SOAP,按其中指定的接口(interface)调用相应的函数,生成结果XML数据,返回给THTTPSoapDispatcher
    TWSDLHTMLPublish主要用于向客户端提供WSDL接口和数据类型等的定义信息。
    如果你使用DELPHI做WEB Service的客户端的话,在Web Service Importer输入的URL就是这个控件生成的。
    如果你不希望别人针对你的服务器做进一步的开发的话,可以将它删除。不过这样,你在做客户端的时候就无法使用Web Service Importer从URL直接导入接口信息了。2、如果需要使用复杂类型,最好新建一个unit2,用于复杂类型的申明;
    注意
    复杂类型要继承自TRemotable;
    需要有客户端调用的属性要用publish property导出;
    在远程类信息库中注册和反注册刚定义的类型:
    在initialization段写:
     RemClassRegistry.RegisterXSClass(TMyDataType);
    在finalization段写:
     RemClassRegistry.UnRegisterXSClass(TMyDataType);
    其中,TMyDataType为自定义的类;
    3、新建一个unit3,用于定义接口interface;如:
    type
     IMyInterface = Interface(IInvokable)
    ['{8A80FF6D-3D21-4687-B24A-88918A691B30}']  //这里是按ctrl + shift + G自动生成的;
       function GetServerInf(ID:Integer):TMyDataType;StdCall;
     end;
    要注册接口,在implementation的initialization段中写:
     InvRegistry.RegisterInterface( TypeInfo(IMyInterface) );
    IMyInterface为刚才注册的接口
    4、在unit1中定义接口对应类及其实现;
    注意在客户端调用的函数需要定义成stdCall的;
    最后要注册接口类,在implementation的initialization段中写:
     InvRegistry.RegisterInvokableClass(TMyInterface);
    IMyInterface为刚才注册的接口
    5、到这里您的服务器端已经完成。如果您需要给其他人提供WSDL接口,可以在浏览器中输入:
    http://localhost/soap/myserver.dll/wsdl/IMyInterface
    这样就获得了一个WSDL文件,将它保存起来后作为文档提供给开发者就可以了。
    一般来说,导出了这个文件之后,前面所提到的TWSDLHTMLPublish就不需要了,可以将它删掉,重新编译以下即可。客户端
    1、新建一个application,并在主窗口上放上相应控件,此时有一个project1.pas和unit1.pas;
    2、选New->Web Service->Web Service Importer,在wizard的URL栏内填入:
    http://localhost/soap/myserver.dll/wsdl/IMyInterface
    myserver.dll为服务器端的服务程序,IMyInterface为服务器端注册的接口;
    此时,Delphi会自动产生三个unit,分别导入接口、复杂类型定义以及一个Delphi内部自定义的一个数据类型;
    3、在主窗口上放置一个THTTPRio控件(在WEB Service页),在该控件的URL属性中填入:
    http://localhost/soap/myserver.dll/soap
    myserver.dll为服务器端的服务程序
    4、为客户端设定相应的动作以向服务器端提交请求。
    注意调用服务函数时使用:
    var MyVar:TMyDataType;
    MyVar:=(HTTPRio1 as ISoapEmployee).GetServerInf(...);
    其中,TMyDataType为自定义的类,GetServerInf(...)为服务器接口的服务函数. 
      

  2.   

    请问: sysu:怎样创建不许要IIS的WebService?
      

  3.   

    不一定
    IIS/Apache都可以的
    只是调试程序就可以使用Web Debugger(只用于调试的,正式使用时必须是IIS或Apache)
    (D7中是这样的,D6就不记得了)