zoukankan      html  css  js  c++  java
  • delphi web services控件组

     delphi提供的web services控件说明

    T H T T P R I O通过H T T P和S O A P封包调用远程Web Service

    TO P To S o a p D o m C o n v e r t把Object Pascal调用的We b
    S e r v i c e服务转换为S O A P形式的封包,并且把Web Service
    返回的S O A P结果封包转换为Object Pascal的类型以便让客
    户端应用程序访问结果

    T H T T P R e q R e s p通过Wi n i n e t . d l l传送出H T T P请求的S O A P
    封包给远程Web Service,或是接受远程Web Service返回的
    H T T P结果

    T H T T P S o a p D i s p a t c h e r会拦截H T T P请求,并且把S O A P的
    请求分派给T H T T P S o a p P a s c a l I n v o k e r组件以激活对应的
    Web Service函数

    T H T T P S o a p P a s c a l I n v o k e r负责根据H T T P请求调用正确的
    Web Service服务

    T W S D L H T M L P u b l i s h负责自动产生描述Web Service的服
    务信息以及W S D L内容

    T S o a p C o n n e c t i o n可以调用在Web Service之中实现的应用
    程序服务器

    通过Delphi6的We b S e r v i c e s组件组,程序员可以轻易地实现Web Service
    让客户端调用,或是开发客户端应用程序调用任何种类的Web Service

    要使用Web Service,那么必须在
    Wi n d o w s 平台中使用Wi n i n e t . d l l 来实际传送和接收H T T P请求,因此
    Wi n i n e t . d l l必须安装在用户的系统之中。

    首先当然需要实
    现Web Service,接着要输出描述Web Service的W S D L内容以便让客户端应用
    程序知道Web Service提供的服务。

    接着客户端应用程序便可以根据W S D L的内容来调用Web Service并且取
    得Web Service提供的服务

    Web Service应用程序也可以是一般的应用程序,不一定必须是
    Web类型的应用程序

    注意使用Soap Server Application向导建立的Web Service应用程序都
    是属于We b类型的Web Service服务器。不过这并不代表Web Service应
    用程序一定必须是We b类型的应用程序,基本上任何类型的应用程序
    都可以成为Web Service服务器

    T H T T P S o a p D i s p a t c h e r组件主要是用来分配客户端的请求到适
    当的服务端方法来处理

    当T H T T P S o a p D i s p a t c h e r组件拦截到这种H T T P请求之后,就会
    调用T H T T P S o a p P a s c a l I n v o k e r组件的D i s p a t c h S o a p方法来处理这个H T T P请
    求。T H T T P S o a p P a s c a l I n v o k e r组件的D i s p a t c h S o a p方法则会根据这个H T T P请
    求找到在Web Service服务器中实现的对应方法,然后调用这个方法来处理此
    H T T P请求

    请注意T W S D L H T M L P u b l i s h组
    件的P a t h I n f o特性值为w s d l *,而M e t h o d Ty p e特性值为m t A n y,这代表任何对
    于这个范例Web Service 服务器提出w s d l为结尾的H T T P请求都会由
    T W S D L H T M L P u b l i s h组件处理。而T W S D L H T M L P u b l i s h组件处理的方式就
    是返回此Web Service的W S D L文件内容

    设定T W S D L H T M L P u b l i s h组件的
    A d m i n E n a b l e d特性值为Tr u e。设定A d m i n E n a b l e d特性值为Tr u e可以让我们稍
    后使用浏览器来进行管理工作,

    Web Service真正的意义是开放对外提供的服务,并且需要程序员实现
    Web Service通过W S D L对外保证的服务功能。

    Delphi 在实现Web Service的
    服务时是使用接口( I n t e r f a c e )的机制,程序员必须先定义一个或是数个接口,
    并且在接口中定义Web Service提供的服务(函数),最后再使用类实现这些接
    口提供的服务。

    程序员使用
    D e l p h i的接口定义Web Service的服务,使用D e l p h i类实现服务接口,接着必
    须注册服务接口信息以及实现的类信息。如此一来就可以自动让客户端通过
    I n t e r n e t / I n t r a n e t的S O A P调用并且使用Web Service对外提供功能

    先定义,然后注册Web Service的服务接口。

    接口必须是从D e l p h i定义的I I n v o k a b l e接口继承下来的,
    因为要让客户端的应用程序能够从远程调用, Web Service的接口必须包含新
    的Delphi 接口RT T I信息(Interface RT T I ),如此一来才能够使用较有效率的
    静态绑定调用

    请注意Web Service要对外输出的方法(服务)最好是声明使用
    s t d c a l l的调用惯例,否则客户端可能无法调用到此输出的方法(服务)。

    D e l p h i的I I n v o k a b l e接口是下面这样定义的,它使用了新的Delphi 6的编
    译指令{ $ M + }和{ $ M - },这样可以在I I n v o k a b l e接口和所有从I I n v o k a b l e接口
    继承下来的接口中包含接口RT T I以便让T H T T P S o a p P a s c a l I n v o k e r组件能够调
    用到正确的接口方法。
    IUnknown = IInterface;
    { $ M + }
    IInvokable =i n t e r f a c e( I I n t e r f a c e )
    e n d;
    { $ M - }

    在声明了I F i r s t W S接口之后,接着必须注册此接口,之后才能够顺利地
    让客户端调用。要注册Web Service接口就必须使用Delphi 6内部的全局对象
    变量I n v R e g i s t r y V。要访问I n v R e g i s t r y V,程序员首先在程序代码中使用
    I n v o k e R e g i s t r y程序单元,然后调用I n v R e g i s t r y函数。

    取得了I n v R e g i s t r y V对象之后,就可以调用它的R e g i s t e r I n t e r f a c e方法注
    册I F i r s t W S接口了。R e g i s t e r I n t e r f a c e方法具有如下的函数原型:
    p r o c e d u r e RegisterInterface(Info: PTypeInfo; Namespace: string = '';
    WSDLEncoding: InvString = ''; Doc: string = ''; ExtName: InvString = '');

    R e g i s t e r I n t e r f a c e程序接受四个参数,第一个参数是程序员定义的接口的
    48使用Delphi 6 / Kylix 2 SOAP / Web Service程序设计篇
    下载
    编译器信息, I n v R e g i s t r y V会使用这个接口信息动态地建立调用结构。第二
    个参数N a m e s p a c e是一个U R I做为代表接口信息的惟一标识符,以便可以让
    客户端使用U R I来找到特定的Web Service接口。如果程序员没有传入这个参
    数,D e l p h i会自动地产生它,结果U R I使用如下的形式:
    'urn:' + URIApp 定+义 接口的程序单元名称+ '-' + 定义的接口名称
    其中U R I A p p是代表Web Service应用程序的U R I,在一般的情形中是空
    字符串。因此在这个范例中D e l p h i会自动产生如下的N a m e s p a c e:
    urn: FirstWSIn-tfI F i r s t W S

    实现Web Service服务接口

    有了I F i r s t W S接口之后接下来的工作当然就是要实现这个接口以便客户
    端调用。

    u n i t  F i r s t W S I m p l ;
    i n t e r f a c e
    u s e s
    FirstWSIntf, InvokeRegistry;
    t y p e
    TFirstWS =c lass (TInterfacedObject, IFirstWS)
    p u b l i c
    f u n c t i o n GetWSMsg : Strings; t d c a l l;
    e n d;
    i m p l e m e n t a t i o n
    { TFirstWS }
    f u n c t i o n TFirstWS.GetWSMsgS: t r i n g;
    b e g i n
    Result := 太'棒了, 这是我使用Delphi 建6 立的第一个Web Service!!!';
    e n d ;
    p r o c e d u r e F i r s t W S F a c t o r y (o u t obj: TObject);
    b e g i n
    obj := TFirstWS.Create;
    e n d;
    i n i t i a l i z a t i o n
    InvRegistry.RegisterInvokableClass(TFirstWS, FirstWSFactory);
    e n d .

    于D e l p h i提供了数种不同的方式让程序员实现Web Service

    其中T I n t e r f a c e d O b j e c t类是一个线程安全( T h r e a d S a f e )
    的类, 如果程序员要实现任何的D e l p h i 接口, 那么最好是使用
    T I n t e r f a c e d O b j e c t类做为基类。

    接着就可以编译本范例
    并且先执行一次以便向系统注册。请注意,由于在前面是以Web App
    D e b u g g e r的类型来实现此Web Service,因此事实上本Web Service是一个
    C O M对象,因此必须先执行此范例Web Service以便先向系统注册。在执行了
    范例Web Service之后,我们就可以使用Delphi 6的Web App Debugger来观察
    此范例Web Service的信息。请点击To o l s | Web App Debugger

    如果Web Service是由D e l p h i开发的,那么可以使用T H T T P R I O组件的
    U R L特性或是W S D L L o c a t i o n加S e r v i c e和P o r t特性。
    2) 如果Web Service 不是由D e l p h i开发的, 那么就必须使用
    W S D L L o c a t i o n加S e r v i c e和P o r t特性。

    D e l p h i的T H T T P R I O组件能够同时调用由D e l p h i撰写的We b
    S e r v i c e,或是由其他开发工具开发的Web Service,例如J a v a、C / C + +等,非
    常有弹性。T H T T P R I O组件也能够使用动态绑定的方式调用Web Service或是
    使用静态绑定

    T H T T P R I O组件四个重要的特性以及它们的说明
    W S D L L o c a t i o n 指定绑定Web Service的位置
    S e r v i c e 指定要使用Web Service中的哪一个服务
    P o r t 指定Web Service的Port Name
    U R L 指定Web Service的U R L地址,它必须是D e l p h i中T H T T P S o a p D i s p a t c h e r
    组件使用的P a t h I n f o名称

    由于S O A P和Web Service仍然在开发的阶段,因此T H T T P R I O组
    件不一定能够调用所有由其他开发工具实现的Web Service,虽然
    T H T T P R I O组件目前可以调用许多由J a v a和A S P、I S A P I、C / C + +等实
    现的Web Service 。但是有一些由J a v a和大部分由. N E T实现的We b
    S e r v i c e仍然无法调用。B o r l a n d会在后续的D e l p h i版本和Service Pack
    中持续改善T H T T P R I O组件,让它尽可能能够调用所有的Web Service。


     

  • 相关阅读:
    django-02框架-配置、静态文件和路由
    django-01框架-工程搭建
    python虚拟环境安装
    linux推送文件到另一台主机
    python2问题收集
    python diff json方法
    Linux expect详解
    python scp到远端机器
    shell远程执行命令(命令行与脚本)
    git操作
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940985.html
Copyright © 2011-2022 走看看