本文介绍的是如何用Delphi6开发Web Service程序,并把服务程序放在IIS Web服务器上提供给各种客户程序调用。 
一编写服务程序第一步:File----->New----->Other------>WebServices----->Soap Server Application选择ISAPI/NSAPI Dynamic Link Library然后确定。生成一个框架。后面的大部分原代码都需要自己手工添加第二步:定义一个接口单元。先通过向导生成一个空的单元文件,然后在此单元中实现基本的接口(Iinvokable)和定义以后客户端程序可以调用的方法,原代码如下:unit unit1;
interface
uses  InvokeRegistry;//基本的结构和方法的定义都在此单元中,必须引用
type
IWebTest=interface(Iinvokable)//自定义的一个结构,继承自Iinvokable
['{A436B0D2-D490-4C80-820A-355D979E8704}']//通过Ctrl+Shift+G生成的一个GUID
function gettext():widestring;stdcall;//自定义的一个方法,也是以后客户可以调用的方法
end;
implementationinitialization//初始化
InvRegistry.RegisterInterface(Typeinfo(IWebTest));//通过此方法来注册接口
end.第三步:实现第二步中所定义的接口和方法。先通过向导生成一个空的单元文件,然后定义自定义接口(IWebtest)的实现类。原代码如下:unit Unit2;interface
uses  InvokeRegistry,Unit1;//引用自定义的接口单元
type
TWebTest=class(TInvokableClass,IWebTest)//定义实现类,此类必须继承自TInvokableClass,并实现自定义接口
protected
function gettext():widestring;stdcall;//申明在自定义接口中所定义的方法
end;
implementation{ Test }
procedure createwebtest(out obj:tobject);//此过程为创建类实例,必须手工添加
begin
obj:=TWebTest.Create;//创建类实例
end;
function TWebTest.gettext: widestring;//实现自定义方法
begin
Result:='Success';
end;
initialization//初始化
InvRegistry.RegisterInvokableClass(TWebTest,createwebtest);//注册自定义类
end.第四步:编译整个应用程序,即产生一个*.dll的程序,把此程序拷贝到IIS的Cgi-bin目录下(或者其他可执行的目录,要根据自己的目录来选择),然后即可通过以下方式的链接访问到Wsdl:http://192.168.1.222/cgi-bin/*.dll/wsdl访问到以XML方式编码的Wsdl文件了,这就是客户端程序调用需要的文件。其中*.dll为你自己的应用程序的名字。192.168.1.222为你的Web服务器地址。Cgi-bin为你的Web服务器的可以执行Cgi程序的目录名称。以上是我参考网上的方法写的,结果问题出在第四部,也就是没法生成 http://192.168.1.222/cgi-bin/*.dll/wsdl访问到以XML方式编码的Wsdl文件,还请大侠指点下原因~另外:我没开启 web app debugger~ 谢谢大家了

解决方案 »

  1.   

    正常情况下是可以生成的。关键是要保证你的DLL部署是否正确。如果是使用IIS的话应该要保证IIS服务和网站都已经启动
      

  2.   

    看你使用的是ISAPI模式的DLL。在这种模式下,你可以在你的wwwroot目录下建个目录假设叫mydll,然后将你的DLL放进去。然后从控制面版选择internet信息服务,选中你的站点,然后右键选择新建--虚拟目录,接下来输入虚拟目录的名称,可以使用mydll,然后选择你刚才建的目录wwwroot下的mydll,然后在下一步勾选上执行(如ISAPI选项),完成。这样就OK了。最后在网站的ISAPI筛选器上把你的DLL加进去就OK了。重起IIS服务,网站
      

  3.   

    谢谢各位大哥的意见,按照 beiguofengguang 大哥的方法做出来了~可以给分了