Webservice发布,访问,和站点配置是一套活儿,若中间某个环节出了问题,则一套活儿很难进行下去的,所以把体会到的写成笔记。
对MS Soap toolkit 3.0的理解是:表相的webservice体现是 WSDL 和 WSML 二个文件,它们之间的关系一个是服务内容,一个是获得服务内容的 type 定义,而任务是COM通过SOAPIS30.DLL,借助IIS服务器的 ISAPI能力完成的。
如果WSDL是下面的这张服务能力的列表
那WSML就是下面这张 type 列表
而实现则是由COM + (SOAPIS30.DLL+(ISAPI+IIS)) 完成的。
现在的.NET平台上,WSDL和WSML,合二为一,封装成为 ASMX 文件。
基于上面的分析,任务分解为:
1. 安装 ms soap toolkit3.0 套件,
2. 用regsvr32 soapis30.dll注册dll,
3. 在IIS上建站点,为WSDL文件创建映射,模块选用 soapis30.dll
4. 用VB6写COM,并用regsvr32注册。
5. 用 WSDL generator 将 COM 创做出 WSDL和 WSML 文件,放置到站点下
6. 在VS2022上写VB.NET窗体(.NET Framework)程序访问webservice
7. Delphi7调用soap toolkit的soapclient功能访问webservice
1. 安装 soap toolkit,全部默认安装,直接yes到底
2. 注册控件soapis30.dll
3. 配置IIS站点
找到站点上拟存放WSDL和WSML文件的地方,没有的话创建文件夹,然后添加映射,让这个地方的*.WSDL请求,用SOAPIS30.DLL去处理。
站点的dll要启用isapiMoudle
站点的WSDL要用soapis30.dll去处理,它是一个isapi的dll
4. 用vb6写COM
在VB6中创建activex DLL,加上一个类 Sample1.cls,在类中写两个函数,然后生成dll,在CMD下将它注册到系统中。
5. 用WSDL generator将 4 中的dll生成wsdl和wsml
这一步稍细一些。点击 next
这一步还是next(上面的选择框是选择站点上已有配置用来修改的,不勾选)
按下面的说明填写
自己DLL中的类和方法就都提示出来了。勾选它们。
选择访问点位置,
这个位置会被写入WSDL和WSML文件中,并不是把生成的WSDL和WSML文件自动存放到那里。
这一页默认,不用修改。
点击next开始生成,生成后产生下面几个文件。
这原本在Select COM那页起名字时是DocSample1,我再做生成时起名字是 TestWEBservice,所以它不是 DocSample1了。名字自己取,没有限制。
生成的这几个文件要自己考贝到站点下,它不会自动发布过去。VS2022会自动完成站点发布,无需人为干预,后期的东西还是为用户简化了许多工作。
6. 在VS2022上写VB.NET窗体(.NET Framework)程序访问webservice
创建VB.NET WINDOWS .netframwork 窗体工程
右键选中项目名,然后添加服务引用。
地址处是我输入过的,所以下拉中可以看到。以asmx结尾的是用vb.net写的webservice,以WSDL结尾的是VB6写的webservice
站点上WSDL服务在左侧,点开后右侧是操作方法,即dll中的那些Public Function,左下侧是命名空间。
按命名空间和服务定义object,通过object调用其中的方法(方法会自动提示出来)
7. Delphi7调用soap toolkit的soapclient功能访问webservice
建空白窗体项目,引用microsoft soap type library v3.0
类和接口的type在 mssoarlib30_tlb.pas中,在unit1.bas的use中把它use进去。
窗体上放置两个 Edit ,一个Button1
在Button1下写代码
procedure TForm1.Button1Click(Sender: TObject);
var
mySoapClient3: OleVariant;
begin
mySoapClient3:= CreateOleObject('MSSOAP.SoapClient30');
mySoapClient3.mssoapinit('http://192.168.3.113/Soap3DocSamples/DocSample1/Server/TestWEBservice.WSDL', 'TestWEBservice', 'Sample1SoapPort');
Edit2.Text:= mySoapClient3.EchoString('Tom');
Edit3.Text:= mySoapClient3.AddNumbers(5,3);
mySoapClient3:= Null;
end;
这东西本身不复杂,但技术链太长了难免中间一个小问题会阻断练习。继续学习!