请问:delphi开发的Web Service是不是都需要IIS? 请问:delphi开发的Web Service是不是都需要IIS?如果有不需要IIS的怎样开发?先谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用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数据,返回给THTTPSoapDispatcherTWSDLHTMLPublish主要用于向客户端提供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/IMyInterfacemyserver.dll为服务器端的服务程序,IMyInterface为服务器端注册的接口;此时,Delphi会自动产生三个unit,分别导入接口、复杂类型定义以及一个Delphi内部自定义的一个数据类型;3、在主窗口上放置一个THTTPRio控件(在WEB Service页),在该控件的URL属性中填入:http://localhost/soap/myserver.dll/soapmyserver.dll为服务器端的服务程序4、为客户端设定相应的动作以向服务器端提交请求。注意调用服务函数时使用:var MyVar:TMyDataType;MyVar:=(HTTPRio1 as ISoapEmployee).GetServerInf(...);其中,TMyDataType为自定义的类,GetServerInf(...)为服务器接口的服务函数. 请问: sysu:怎样创建不许要IIS的WebService? 不一定IIS/Apache都可以的只是调试程序就可以使用Web Debugger(只用于调试的,正式使用时必须是IIS或Apache)(D7中是这样的,D6就不记得了) 程序里如何根据数据库的不同而执行不同SQL语句? Windows7 实现任务栏特殊效果 那儿有InfoPower 4000 for d7 ,d6 or bc++6下载? 如何使RichEdit控件位于其他控件的下面? stringgrid的问题? Delphi 6和RealOne的ActiveX控件好像有冲突。问的问题太多没分了,不好意思。 关于delphi6.0的问题 delphi简单问题 我是一个初级用户,遇到了这个问题,高分增送! 急!急!急!编程问题 请教功能键的问题? 呵呵!第五个三角了,散分给大家。顺便说一下自己的经典格言!
服务器端:
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(...)为服务器接口的服务函数.
IIS/Apache都可以的
只是调试程序就可以使用Web Debugger(只用于调试的,正式使用时必须是IIS或Apache)
(D7中是这样的,D6就不记得了)