delphi用什么步骤可以实现异步调用delphi xe webservicee

Delphi调用webservice经典实例;Dispatch:派遣,分派Invoke:调用I;TReomtable:WebService中自定;ISAPI:(DLL)Base64编码:uses;为了在设计中减少障碍,下面还介绍几个概念;1)SOAP:SOAP是一种简单有效的数据传输协;2)WSDL:WSDL(WebServiceDe;3):处理中文乱码的问
Delphi 调用webservice 经典实例
Dispatch: 派遣,分派 Invoke: 调用 Invokable: 可调用接口
TReomtable: WebService中自定义类都是继承自该类 TSOAPAttachment: Attachment:附件,一种流类型,可以返回流数据 CGI:(EXE)
ISAPI:(DLL) Base64编码: uses EncdD s := EncodeString(s); //加 base64 编码 s := DecodeString( str ); //解码 UTF8: UTF8 是8位的UNICODE字符,而ASCII是7位 ,gb2312和unicode是2字节/字,utf8是3字节/字utf8类似以前的8位转7位的编码,是为 了 在网络间不同系统的通讯方便而作的转换。 几乎所有用.Net写的WebService只支持DOC方式、Delphi写的只支持RPC方式;J2ME目前对Web Service的支持仅限于RFC172,而 RFC172要求必须为DOC方式(sun怎么偏袒MS?)!
为了在设计中减少障碍,下面还介绍几个概念。
1) SOAP:SOAP是一种简单有效的数据传输协议,用于分布式网络环境下数据信息交换,它以XML 作为数据传输的格式,搭配Internet上标准的传输协议HTTP、SMTP、TCP等来传送信息。从本质上看,SOAP事实上只是将Request和 Response经由XML格式把数据打包,达到双方沟通的目的。
2) WSDL:WSDL(Web Service Description Language)是一种以XML格式描述的Web Service语言,当Web Service Provider 要对外公布提供的 Web Service,就需要通过WSDL来构建描述语言。 在WSDL中有两个非常重要的要素: :此WSDL文件所要描述的Web Service集合; 每一个Port代表外界Client可以和此Service沟通的一个进入点,一个Port会指定一个Binding方式。
3):处理中文乱码的问题: 将HttpRio的 Converter 的 Options 的
soUTF8InHeader 设为 True 将生成soap消息的HTTPSoapDispatcher控件,添加encoding为gb2312 HTTPRIO.HTTPWebNode.UseUTF8InHeader := T
4)在Delphi中,能够传递的自定义类型的对象要继承TRemotable,
5:修正一个服务器端的一个Bug:将ISAPIThreadPool和ISAPIApp的次序变一下:ISAPIApp必须在 ISAPIThreadPool之前: uses ... ISAPIApp,
ISAPIThreadPool 解决如下错误: Received content of invalid Content-Type setting:text/html -SOAP&expects&text/xml& 6:&XML document must have a top level element. Line: 0& 错误,我该如何解决?? 哈纳斯 ( 17:26:00) 我也曾碰到同样的问题 解决方法是:别设httprio的wsdllocation,设它的url 如http://localhost/mydir/project1.exe/wsdl/IFIRST mydir是你的可执行的虚拟目录,IFIRST是你定义的接口名
***********************************************************************************************
Delphi中WebService包含的组件解释(有7个)
(1) THTTPRIO-------:使用Http消息来调用远程使用SOAP的接口对象
(2) THTTPReqResp---:给服务器发送一个SOAP消息, THTTPReqResp在可调用接口上执行一个方法请求.
(3) TOPToSoapDomConvert ----:TOPToSoapDomConvert处理Soap方法请求的组合与分发
(4) TSoapConnection:TSoapConnection在客户端的多层数据库应用中创建并维护客户端和作为WebService 的远程应用服务器间的连接
(5) THTTPSoapDispatcher -----:通过将Soap消息转发给调用
者,THTTPSoapDispatcher对Soap消息做出响应.
(6) TWSDLHTMLPublish -----:TWSDLHTMLPublish发布描叙webService应用的Wsdl文档
(7) THTTPSoapPascalInvoker -----:THTTPSoapPascalInvoker解释Soap的请求信息,并执行相应的可调用接口.
***********************************************************************************************
WSDL 说明:
(Web Services Description Language) 规范是一个描述接口,语义以及Web服务为了响应请求需要经常处理的工作的XML文档。这将使 简单地服务方便,快速地被描述和记录。以下是一个WSDL的样例:
first service
它包含了以下的关键信息: 消息的描述和格式定义可以通过XML文档中的和 标记来传送。 标记中表示了消息传送机制。 (e.g. request-only,
request-response, response-only) 。 标记指定了编码的规范 。 标 记中表示服务所处的位置 (URL)。 WSDL在UDDI中总是作为一个接口描述文档。因为UDDI是一个通用的用来注册WSDL规范的地方,UDDI的规范并不限制任何类型或者格式描述文档 。这些文档可能是一个WSDL文档,或者是一个正规的包含导向文档的Web页面,也可能只是一个包含联系信息的电子邮件地址。现在Java提供了一个 Java API for WSDL (JWSDL)规范。它提供了一套能快速处理WSDL文档的方法,并且不用直接对XML文档进行操作,它会比 JAXP更方便,更快速。 ***********************************************************************************************
(Simple Object Access Protocal)。 我们先简单了解WebServices运作模式。服务端生成服务描述文件WSDL(Web Services Description Language,类似COM的Interface Description Language),如果接收客户端的SOAP请求消息(XML格式数据),解析其调用和参数,根据WSDL和WSML(Web Services Meta Language,Microsoft为描述WSDL里提供的方法与实现该方法的COM对象之间的映射关系而特地设立),调用相应COM对象完成指定功 能,并返回 到SOAP消息遣至用户;客户端取得并解析服务端的服务描述文件从而得知服务端的服务内容及调用方式,生成SOAP请求消息(指定调用的方法 名称和参数)送往服务端。
***********************************************************************************************
TReomtable说明
: WebService中自定义类都是继承自该类 //自己定义一个继承自
TRemotable的类 (注意只有属性定义,没有方法) TSpeciesInfo =
class(TRemotable) private FLength: I FSpeciesName: FCategory: FCommonName: FmoreInfo: published property Category: string read FCategory write FC property CommonName: string read FCommonName write FCommonN property SpeciesName: string read FSpeciesName write FSpeciesN property Length: Integer read FLength write FL property MoreInfo: string read FmoreInfo write FMoreI
TSOAPAttachment说明
:一种Soap的流类型数据.跟平时的integer等等一个意思 //比如
(1):服务器端建立一个流输出(result:)
GrapStream:=TMemoryStream. try
SoapAttachment:=TSoapAttachment.
TBolbField(frmdm.adoqury.fields[0]).SaveToStream(GrapStream); SoapAttachment.SetSourceStream(GraphStream,soReference);
result:=SoapA except if assigned(GrapStream) then
GrapStream. if assigned(SoapAttchament) then SoapAttchment. end
(2):客户端接受一个流输入 var src: begin if not
Assigned(SoapAttachment) Src:=SoapAttachment.CacheF ....
例子,基于Soap和webService的分布式网络程序实例
//编写服务器端 --ok
1:File ---&New----&Other-----&WebService---&Soap WebService
Application 后生成3个组件 一个是调用者组件:THTTPSoapPascalInvoker:完成Soap消息和.... 一个是调度者组件:THTTPSoapDispatcher:自动响应送入的soap消息,并且把他们传递给调用者,可以使用他的 WebDispatch属性来识别应用程序响应的http请求.包括设置PathInfo属性来指明指向应用 程序的任何URL的路径部分,设置MethodType属性来指明请求消息的方法头. 一个是WSDL发布者:TWSDLHTMLPublisher:WSDL发布者发布描叙接口以及如何调用他们的
wsdl文档,使用非delphi 编写的客户端程序也可以调用WebService应用程序.
2:在接口中添加方法和在实现该接口的类中实现该方法. (1):接口中自定义的类都是继承自TRemotable类,该类只能有属性,没有方法 (2):
3:将生成的Dll文件拷贝到 C:\InetPub\Scripts目录下面.
//编写客户端 --ok
(1):File---&New---&other----&WebSerice---&Wsdl Importer: 对话框1:WsDl Source:输入==&http://服务器名/scripts/应用程序名/wsdl/相应接口 ,然后Next下步.然后点finish
(2):添加一个普通的窗体,上面放WebService中的控件:HTTPRIO,编写它的OnAfterExecute ,OnBeforeExecute事件 连接服
务:http://server/script/MyWebService.dll/Soap/ImyWeb ***请注意是Soap/接口 FAttachService为WebService的接口 if FAttachService = nil then begin FAttachService := GetiMyWeb(False, EditUrl.Text); (FAttachService as IRIOAccess).RIO.OnBeforeExecute := HTTPRIO1BeforeE
(FAttachService as IRIOAccess).RIO.OnAfterExecute :=
HTTPRIO1AfterE Result := FAttachS
******************************************************************************* (HTTPRIO1 as ITest).TestFunction(aParam, bParam);
(3):注意在IIS中设置Script的是否有执行权限.
编写一个基于Soap DataModule的三层数据库应用
建立一个Web App Debugger executable类型,不需要接口,添加一个Soap Data Module,放上AdoCon,AdoDataSet,DataSetProvider1 设置数据好连接,利用AdoDataSet打开一个数据集,然后编译运行,打开Web App Debugger查看是否正确.
(1)建立一个普通的应用程序,添加SoapConnection1组件,设置他的url:格式为:http://localhost:1024/Demo3.wadSoapDemo3/soap
(2)添加一个ClientDataSet 设置它的
RemoteServer=SoapConnection1,provideName=DataSetProvider1 (注意将Web App Debugger打开) (3)Active就可以看到数据了.
WebService的服务器端的调试
(1):编写服务器时选择:Web App Debugger executable类型
(2):编写完成后运行一次服务器,则系统将把该webservice的类注册
(3):启动Tool---&Web App Debugger,设置servers的options
port============1024 default
url=====http://localhost:1024/Demo3.wadSoapDemo3/wsdl 其中demo3为exe程序的名字, wadSoapDemo3为建立服务器的时 候填写的类名称,可在主Form的initialization中找
到:TWebAppSockObjectFactory.Create('wadSoapDemo3')
(4)打开ie,在地址输
入:http://localhost:1024/Demo3.wadSoapDemo3/wsdl就可以查看接口了
三亿文库包含各类专业文献、中学教育、各类资格考试、幼儿教育、小学教育、高等教育、专业论文、文学作品欣赏、14Delphi调用WebService的实例(非常经典)等内容。 
 Tomcat 的 common/lib 目录 25)在 Java Web 应用...应当从 init()调用 service()方法 D. 应当至少...实例的时候,init()方法是由( )执行 A) 程序员...  Java WebService 简单实例前言: 朋友们开始以下教程前, 请先看第五大点的注意事项, 以避免不必要的重复操作。 一、准备工作(以下为本实例使用工具) 1、MyEclipse...  WebService完全实例详细解析_高一理化生_理化生_高中...xml 使用最为广泛,而且考虑到跨 平台应用,所以这里...C#操作webservice(经典入... 25页 1下载券 喜欢...  WebService 实例详解 Web Service 是一种新的 Web 应用程序分支,他们是自包含、自描述、模块化的应用,可 以发布、定位、通过 Web 调用。Web Service 可以执行从...  实例化,加载类,初始化,请求处理,销毁 D、 加载类...某 web 应用的上下文路径是 root,配置文件 web.xml...()方法, 因为一个 service()方法会调用 doPost ...  WebService调用例子(vc6.0)_IT/计算机_专业资料。WebService调用例子(vc6.0) ...Delphi调用Webservice的... 暂无评价 10页 免费
XFire WebService开发例... ...  WebService开发示例_计算机软件及应用_IT/计算机_专业资料。很实用的例子用于指导开发 webservice,及调用案例开发WebService ......  C#调用 WebService 实例和开发一、基本概念 Web Service 也叫 XML Web Service WebService 是一种可以接收从 Internet 或者 Intranet 上的其它系统中传递过来的请求...  C#调用WebService实例和开发_计算机软件及应用_IT/计算机_专业资料。C#调用 Web...Delphi调用WebService的... 7页 1下载券
Java 1.6 开发和调用Web... 2页...博客分类:
最近在学习Java,一直都在搞 Delphi的项目,也是项目的需要,所以就想构建一个delphi调用java服务 的Webservice,由于刚学习java,很多东西不是很熟悉,搞起来挺费劲的。
在Google上搜了N多资料,这其中主要碰的麻烦事情就是:
(1)Applicationcontext的配置和jar包的冲突问题,都快无语了,不过配置多了就熟悉了。
(2)数据显示的问题,java返回的都List对象,delphi没办法用,但是delphi数据处理用得最多就是DataSet等一系列组件。最后在一个帖子里面找到这个TkbmMemTable+java数据Format器(CSV格式),因为有代码,但是代码还得修改一下才能用。
正因为自己摸索搞这个东西太费劲,所以我就想把我自己的Demo奉献给想学习webservice的朋友,有东西可以参考。
补充:文件有点大我把hibernate3.jar删除了,自己加上。(demo1是delphi的源码,demo2是Java的源码)有问题和我联系。
下载次数: 1253
下载次数: 1069
楼主,能不能给我一份啊,我在你这里下载不了啊。谢谢,我现在需要一个例子。
我的邮箱是
我以前服务端用xfire1.2发布的服务,采用soap协议的webservice在性能上很差,也很麻烦,我建议你采用phprpc协议来发布你的服务,delphi客户端安装一个phprpc的组件就可以轻松调java服务端的方法。你可以进/zh_CN网站先学习一下phprpc的东西。对你会有很大帮助。
我一起下了 但是 用delphi6运行你的delphi程序的时候出现了好多的错误 都是一些未定义类型 最后导致uByteDynArrayToVariants.pas不能被编译怎么办啊 如果在线看到我的留言请务必加msn:
把uByteDynArrayToVariants.pas单元去掉(不引用),没有用到这个单元中的函数
请问你的webservice用是的xfire还是axis
longwenbin2008
浏览: 10333 次
来自: 成都
怎么都只是下载delphi的测试源码,要一起把Java的源码下 ...
请问楼主实现了安全机制么
&div class=&quote_title ...
楼主,能不能给我一份啊,我在你这里下载不了啊。谢谢,我现在需要 ...
楼主你好,我现在也正在做这样的项目,苦于数据交换方式不知道用什 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'客户端程序由delphi6开发,WEB SERVICE是VS2005(C#)写的。碰到的问题很多,大都GOOGLE都可以找到答案。但有些我还是重复一下,另外我碰到的一些问题也在这里备注一下。
刚开始是在Delphi6+sp1的环境下开发客户端程序,会出现Internal error(500)的错误或调用的web service的命名空间不正确,无法正确解析。解决办法是在用wsdl importer工具生成的代理类中插入以下两句话:
? InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), '/HelloWorld');//①
? InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument);
①处方法的第二个参数HellowWorld前半部分表示web service类的命名空间,也就是在C#中定义的命名空间,代码片断如下:InvRegistry.RegisterInvokeOptions(TypeInfo(DataServiceSoap), ioDocument); 就报错,说InvRegistry没有RegisterInvokeOptions声明。解决办法是下载delphi6 sp2就可以了。
[WebService(Namespace:=&/&)
[WebServiceBinding(ConformsTo=WsiProfiles.None)]
[SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)]
public class Service?
红色的两句代码非常重要,VS2005默认的web service binding值是BasicProfile1_1。否则在delphi调用web service返回的值总是空。另外在delphi6编译此句
这里贴出delphi6 sp下载的站点:http://se-ed.net/thaidelphicc/xml/updatepack/
参考文档:/mobile/archive//386274.html
补充:delphi的wsdl importer工具会根据wsdl url来自动生成代理类,那么如果对应的WEB SERVICE的方法调用方式是document,代理类中会自动产生InvRegistry.RegisterInvokeOptions(TypeInfo(XXXXSoap), ioDocument); 如果是以RPC方式调用,则不会产生此代码。之前没有产生,是因为没有装SP2的问题。
VS2005的web service binding =BasicProfile1_1是document方式, web service binding =None是RPC方式,可以在VS2005中将WEB SERVICE生成的WSDL文件中查看各个方法的调用方式,如果是RPC,则无需写InvRegistry.RegisterInvokeOptions(TypeInfo(XXXXSoap), ioDocument); 反之则要写。
后来我碰到传递参数给WEB SERVICE,服务器端接受到的参数总是为空,原因是用document的方式去调用RPC方式的WEB SERVICE。
本文已收录于以下专栏:
相关文章推荐
我有一支老舊的 Delphi 7 程序具有發送 SMTP 的功能, 功能整合, 需要調用 C# WebService 發送郵件功能,
發現 Delphi 7并不能像 C# 一樣, 添加了 WebSe...
Delphi和Java实现webservice架构
Webservice现在已经不是什么新技术了,用java建立webservice是快捷的,但是用java在制作客户端的感觉上总是不如 ...
webservicedelphic#dllintegerinitialization转自:/jdmei520/archive//1505...
1、本文档分3个部分,分别为:
用Delphi编写WebService
在IIS下部署WebService
在ASP.NET中调用webservice
2、开发环境为Windows ...
下面说明如何编写用于IIS发布的ISAPI类型的WebService。
1、 New|Other|WebServices|SOAP Server Application|这里先选择建立Web App...
Delphi 编写调用WebService接口的小程序
最近由于项目需要在编写一个webservice的客户端,网上找来了不少资料,都说可以通过delphi自带的向导来生成调用接口的文件。
Delphi调用.NET的WebService,是非常容易和方便的,下面用C#提供的
Login服务,来说明Delphi的调用方法.Login返回的是一个字符串.
一般有以下布骤:
A.调用第一...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&&&&&&&&&&&&&&&&&&
posts - 6,comments - 9,trackbacks - 0
使用delphi已经10多年了,一直搞桌面程序开发,对Webservice一直很陌生,近来因工作需要,学习delphi开发WebService,担心遗忘,作此笔记。 特别感谢 中塑在线技术总监 大犇&(编辑,添加数据库访问示例XE7)一、delphi开发WebService1、打开delphi,选择New--other--WebService,在右侧选择 SOAP Server Application,点击OK&&2、上一步点击OK后,会出现一个提示窗口,这里选择ISAPI 动态链接库,点击OK进入下一步&3、此时会提示一个确认窗口,询问是否为SOAP模块创建接口,这样要选择YES,delphi会为您自动创建一个接口,否则自己动手写会很麻烦&4、点击YES后,delphi会提示你输入 接口服务名称,这个名称在后面就是接口名和实现此接口的类名,这里我们键入MyTest,其他选项不要动,点击&OK5、点OK后,delphi会自动创建两个单元,一个是MyTestIntf接口单元,一个是MyTestImpl接口实现单元6、在MyTestIntf接口单元里面,接口声明后面写入你的接口函数,这个函数就是后面给别人调用实现一定功能的函数。注意:函数声明后面一定要加上stdcall约束参数传入方式,否则其他语言可能无法调用此接口函数7、切换到MyTestImpl接口实现单元,发现delphi已经为我们创建好了接口实现类TMyTest,在类的声明里面写上刚才的接口函数。当然也可以写入其他函数供你的接口函数内部调用,这里我重新构造了类的Create函数及析构函数8、保存项目,编译生成DLL文件,此时delphi编写WebService 就完成了,如此简单&9、日编辑,添加数据库访问功能示例(Delphi XE7下)a、切换到webmodule单元,添加几个控件用于访问后台数据库。连接数据库,将各个组建关联起来,在query中添加sql代码,查询一些数据。
b、在类TWebModule1的public域添加一个方法GetXMLData,并实现该方法返回ClientDataset的XML数据(将query1查询到的数据通过ClientDataset转换为XML)
c、在接口单元添加一个方法,和上面第6步操作一样
d、在接口函数实现单元引用WebModuleUnit1单元,实现GetXMLData方法。在这里将TWebModule1类实例化,调用其访问数据库的方法
e、新建一个VCL项目,添加一个按钮和一个memo,在button click事件添加代码,调用接口函数
f、运行效果
特别说明,在这个例子中,我将数据访问单元TWebModule类的GetXMLData方法和接口函数的GetXMLData方法弄重名了,这样容易混淆。外部客户端调用GetXMLData方法是接口的方法,不是后台数据库访问单元TWebModule的GetXMLData方法,此方法由TEchoTest类的对象在后台调用。
顺序应该是这样的:客户端通过http地址获取接口IEchoTest,后台WebService实例化类TEchoTest,客户端调用接口函数GetXMLData,此方法在TEchoTest类中被实现(TEchoTest类GetXMLData方法),在此方法中实例化TWebModule类,并调用其GetXMLData方法返回数据。二、delphi调试WebService&1、打开IIS,新建网站,至于如何建立网站就不说了,给网站起名,选择物理路径等,把刚才编译好的DLL文件放入网站的物理目录里面&2、将新建的网站目录浏览打开3、在网站的功能选项页,选择可执行程序映射,选择刚才的DLL文件,并在请求限制里面选择[执行],这个DLL就是IIS要调用执行的DLL4、选择 &应用程序池,把里面的 32位兼容打开(我这个版本编译出来的是32位的)和托管管道模式选择为 &Classic5、在浏览器中键入网址&:你的网站端口,回车打开网站,此时浏览器会转到你的网站物理目录下,显示出里面的所有文件,其中有一个就是我们需要的DLL6、点击那个DLL文件,会出现下面这个界面7、点击WSDL,会出现如下界面。这是一个XML文档,描述WSDL的细节,浏览器地址栏中的地址是我们需要的,复制下来&8、返回delphi,新建一个VCL项目。接着选择New--other--WebService,选择WSDL importer,点击OK9、出现一个提示窗口,键入第7步得到的WSDL网址,如果WebService不在本机,注意IP地址要修改10、点击NEXT ---NEXT--OK,delphi会自动引入一个单元,这个单元就是WebService的接口单元,里面会自动生成一个Get开头方法,用来获取接口。在VCL单元引用这个单元,声明一个变量,变量的类型就是接口名称 &
var &obj:IMyTest,
obj:= getXXXXX();
&obj.HelloWord('哈哈哈');至此delphi编写WebService及调用结束。注:第7步得到的WSDL地址很重要,如果点击WSDL出现不了XML文档,说明有问题,这个WSDL地址是不可用的,很可能的原因是网站没配置好。
阅读(...) 评论()学习(10)
至于怎么把webservice发布到服务器上,我就省略不说了。有需要的可以在评论区留言
发布到服务器上之后我们得到这样一个页面;
这个webservice下有两个函数Add和HelloWorld。
我们以Add来示范。
第一步,File-&New-&Applicaiton
在这个页面简单的放一个按钮
第二部,File-&New-&Other
选择webservice标签页,选择WSDLImporter
在这个页面,要注意后面的?wsdl是我们自己加上去的
然后点击next然后finsh,delphi会自动给我们生成一个单元
由于我们是Service1.asmx所以会给我们生成Service1.pas
在生成的单元底部我们需要修改一下代码
InvRegistry.RegisterInterface(TypeInfo(Service1Soap), 'http://tempuri.org/', 'utf-8');
InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap),ioDocument);
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(Service1Soap),'http://tempuri.org/%operationName%');
然后在我们一开始创建的application中引用这个service1单元就可以调用了,具体代码如下:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Service1;
TWbsTest = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
WbsTest: TWbsT
implementation
procedure TWbsTest.Button1Click(Sender: TObject);
_Soap : Service1S
_Result : D
_Soap := Service1.GetService1S
_Result := _Soap.Add(2,3);
ShowMessage(floattostr(_Result));
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4320次
排名:千里之外
原创:25篇
(3)(6)(5)(2)(5)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 delphi编写webservice 的文章

 

随机推荐