【转】Delphi调用webservice总结
原文:http://www.cnblogs.com/zhangzhifeng/archive/2013/08/15/3259084.html
Delphi调用C#写的webservice
用delphi的THTTPRIO控件调用了c#写的webservice。
下面是我调试时遇到的一些问题:
1:导入wsdl文件:file--new----other----webservice---WSDLimporter---输入wsdl地址:如下:http://127.0.0.1/ WebService/WebServiceCall.asmx?wsdl
注意末尾的:'?wsdl'不能少。要不可能会说找不到。
2:设置THTTPRIO控件的属性:
把http:// 127.0.0.1 /WebService/WebServiceCall.asmx?wsdl赋给URL属性,而不是赋给wsdlLocation属性。
3:传递参数是web服务端总为空:
在导入的接口单元的声明部分添加如下代码:
InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap),ioDocument);//其中红色部分为导入接口名称。
在IIS中配置C#写的webservice,有时候会出现如下的错误:
--------------------------------------------------------
分析器错误消息: 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS中没有将虚拟目录配置为应用程序,则可能导致此错误。
源错误:
安全身份验证模式。
-->
<authentication mode="Windows"/>
<!--
如果在执行请求的过程中出现未处理的错误
------------------------------------------------------------------------------
解决方法:
在要发布的虚拟目录中的创建一个应用程序。步骤
你的站点 --> 选中你要发布的虚拟目录 --> 右键单击 --> 属性 --> 目录(选项卡) --> 应用程序名 --> 创建 --> 确定。
然后再重新访问页面,应该就OK了。
Delphi 7 建立测试程序
1、新建一个应用程序:
2、拖一个button一个edit和一个HTTPRIO(在webservices页上)到窗体上;
3、接下来:
File-> new-> other-> webservices-> WSDL importer
输入wsdl文件地址,点击next 导入
保存unit Service1
4、在unit1(form1 的单元文件)中引用Service1
5、 HTTPRIO1的 URL属性设置为 'http://localhost/WebService1/Service1.asmx?WSDL '
6、添加form1 的代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, InvokeRegistry, Rio, SOAPHTTPClient;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
HTTPRIO1: THTTPRIO;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Service1;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=(HTTPRIO1 as Service1Soap).HelloWorld;
end;
end.
如果有时候测试发现,还是不行.......可能有下面的问题,
在用VS2005写的WebService的类属性中加入SoapRpcServiceAttribute属性就可以了。
如 下:
[SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)]
Delphi开发和调用的webservice
下面说明如何编写用于IIS发布的ISAPI类型的WebService。
1、 New|Other|WebServices|SOAP Server Application|这里先选择建立Web App Debugger类型的WebService,因为这种类型的WebService便于调试,当我们调试好它,准备发布时再将此类型转换为ISAPI类型。
2、 选择Web App Debugger后,随便输入一个ClassName,这里我们输入“Test”
3、 随后Delphi会询问你是否建立接口单元,选择是,然后输入接口的名字,我们输入Main,Delphi将自动建立接口单元(名字为你输入的接口名+Intf结束,即MainIntf)和实现接口的单元(名字为你输入的接口名+Impl,即MainImpl)。到此一个空的WebService已建立好。
4、 接下来我们将编写供别人调用的WebService函数。在此我们编写一个简单的例子。打开接口单元(MainIntf),在Type后,接口声明后添加接口函数
“function GetMsg(AMsg: string): String; stdcall;”,函数后面必须加上“stdcall”。
如图:
5、接口函数的声明已经完成,下面就是要实现这个函数了。打开接口实现单元(MainImpl),
在public中写上该函数的声明,在implement后写该函数的实现。如图:
6、到此,WebService已经撰写完毕。接下来是调试。在我们新建的时候,Delphi已经为我们 建立了一个Unit1和其窗体,在Unit1中引用接口单元(MainImpl),然后在窗体中加一个 按钮,在按钮的单击事件中调用刚才写的WebService函数就可以调试了,代码如图:
或者使用THTTPRIO控件
7、调试成功后就可以转类型了,将Web App Debugger类型转换为ISAPI类型其实很简单,我们先重新建一个ISAPI类型的WebService项目,依次选择New|Other|WebServices|SOAP Server Application|ISPA/…,提示是否创建接口时选择“是”,然后输入和刚才一样的接口名,接着保存好,然后将调试成功的Web App Debugger类型的WebService项目中的接口单元和接口实现单元复制替换掉刚刚创建的ISAPI类型项目中的接口单元和接口实现单元,然后打开ISAPI类型的WebService,编译生成dll。至此ISAPI类型的WebService建立成功。
8、将ISAPI类型的WebService发布到IIS上。在IIS中新建站点,新建时将执行权限设置成“脚本和可执行文件”,将WebService整个项目拷贝到站点文件夹下,启动站点,该WebService就算发布成功了,如果IIS是6.0以上的注意在Web服务扩展中将“所有未知ISAPI扩展”设置为允许,
具体设置可参见IIS帮助文档。如图:
9、如何用Delphi调用刚才写的WebService。在浏览器中输入刚才站点的路径,如: http://127.0.0.1/project2.dll,浏览器转到项目所在文件夹,如图:
打开如下图所示的的dll描述页面,该dll中有一个个接口函数GetMsg,它们都是供别人调用的接口函数。点击WSDL打开WSDL描述页面,此时复制该页面的网址http://127.0.0.1/project2.dll/wsdl/IMain,这个网址是我们要用到的。
10、 得到网址后,新建一个Application,我们就在这个Application中调用刚才的WebService。依次点击New|Other|WebServices|WSDL Import,如后提示输入网址,我们输入刚才复制的网址,点击next,finish,此时Delphi将自动添加一个单元,该单元就是调用WebService的单元,有了这个单元我们就可以调用WebService了。在Unit1中引用该单元,再添加一个按钮,在按钮的单击事件中声明一个接口对象,然后调用自动生成单元中的GetMainIntf(该方法是自动生成的)函数给这个接口对象赋值,然后就可以用这个接口对象调用接口函数了。
注意:如果前台使用THTTPRIO控件来连接,
把http://127.0.0.1/project2.dll/wsdl/IMain赋给wsdlLocation属性,而不是赋给URL属性。这点和调用C#不一样
Delphi调用JAVA写的webservice
Java写服务端的webservice
开发环境
MyEclipse 6.5 + jdk6.0 +tomcat 6.0 + axis2
具体的开发步骤不讲,网上都有,只将碰到的几个问题说下:
1、 安装axis2的插件,我使用时网上最新版本是1.6.1,下载下面两个插件
Service Archive Wizard - Eclipse Plug-in
Code Generator Wizard - Eclipse Plug-in
安装网上方法直接拷贝到plugins目录,在MyEclipse中new---->other并没有出现如下的界面
网上也没有找到方法,后来找了下面的版本,就是
Axis2_Codegen_Wizard_1.3.0
Axis2_Service_Archiver_1.3.0
直接拷贝到plugins目录下就可以;
分析:估计是MyEclipse版本中的Eclpise版本低了,装不上高版本的1.6.1,反正低版本也好用;
2、在MyEclipse,开发的时候,如果用Axis2 Service Archiver生成服务的话,需要把项目属性中的java Compiler--->Compiler compliance level:改为5.0,我的都是默认6.0;
要不然最后load不出class中的方法;
3、如需要一些jar文件,比如连接数据库相关的jar,发布到tomcat中时候,需要把这些文件拷贝到webapps\axis2\WEB-INF\lib下;
4、使用Delphi 7调用axis2写的webservice,导入wsdl的时候,没有接口说明,可能是delphi的版本太低了,所以使用了delphi 2010导入生成了接口文件,然后用到了delphi 7中也可以;
5、设置THTTPRIO控件的属性,应把wsdl赋给URL属性,和调c#一样
建议用高版本的开发webservice,如2007,2010等,delphi 7有很多麻烦
【转】Delphi调用webservice总结的更多相关文章
- Delphi调用webservice总结
Delphi调用webservice总结 Delphi调用C#写的webservice 用delphi的THTTPRIO控件调用了c#写的webservice. 下面是我调试时遇到的一些问题: ...
- delphi 调用Webservice 引入wsdl 报错 document empty
delphi 调用Webservice 引入wsdl 报错 document empty 直接引入wsdl 地址报错 document empty 解决办法:在浏览器里保存为xml文件,然后在开发环境 ...
- Delphi调用WebService(通过SoapHeader认证)经验总结
项目(Delphi开发)需要调用另一个系统的WebService.走了不少弯路,现记录总结一下经验.以下是WebService要求: 1.WebService概述 营销Webservice接口采用Ap ...
- delphi调用webservice 转
如今 Web Service 已越来越火了,在DotNet已开发的Web Service中,Delphi 7如何方便的调用DotNet写的Web Service呢?方法有两种,一种是在Delphi ...
- delphi 调用 webservice (.NET C#版)
uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...
- delphi调用webservice (.NET C#版)
uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...
- 03server平台delphi程序不支持直接调用webservice
经过多次测试和查证,发现03server平台用delphi7.0开发的应用程序就是不支持直接调用webservice,无论这个webservice是delphi开发的还是C#开发,抑或是java开发的 ...
- delphi调用java编写的webservice
delphi调用java编写的webservice JAVApojo: public class GroupInfo implements Serializable{ private stati ...
- Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)
相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...
随机推荐
- [转] C#操作EXCEL,生成图表的全面应用
gailzhao 原文 关于C#操作EXCEL,生成图表的全面应用 近来我在开发一个运用C#生成EXCEL文档的程序,其中要根据数据生成相应的图表,该图表对颜色和格式都有严格的要求,在百度和谷歌中搜索 ...
- codeforces 675E Trains and Statistic 线段树+贪心统计
分析:这个题刚看起来无从下手 但是我们可以先简化问题,首先可以固定起点i,求出i+1到n的最小距离 它可以到达的范围是[i+1,a[i]],贪心的想,我们希望换一次车可以到达的距离尽量远 即:找一个k ...
- selenium打开带有扩展的chrome
每当用跑用例失败的时候,第一反应就是查看元素定位是不是正确,帮助定位的扩展是必不可少的,但是selenium一般打开的是不带扩展的干净的浏览器,如果操作步骤很长的话,就得手动去执行直到那一步去检查元素 ...
- PHP 正则表达式总结
可以用字符作为一个通配符来代替除换行符(\n)之外的任一个字符.例如,正则表达式:.at可以与"cat"."sat"."#at"和" ...
- Seam carving 学习笔记
今天首次接触了图像编辑中的seam carving知识,感觉挺神奇的.虽然我自己可能理解的不是很深刻,但是记录下来,总是好的. seam carving直接翻译过来是“线裁剪”的意思.它的主要用途是对 ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- 运行时环境(The Runtime Environment)
App Engine应用响应网络请求.当一个客户端(典型的是用户的Web浏览器)使用HTTP请求(比如获取在URL上的网页)连接上应用的时候,网络请求就开始了.当App Engine接收到请求时,它会 ...
- fedora20安装spin以及用户界面ispin
(博客园-番茄酱原创) (最近感觉用make会出现库错误,所以改进了教程,把之前的make步骤省掉了,直接下载可执行文件进行配置最简单啦...) 1.首先,下载对应版本的spin,我64位的fedor ...
- L0、L1与L2范数、核范数(转)
L0.L1与L2范数.核范数 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大 ...
- CDH5.5.1 安装Spark ON Yarn环境
CDH对我们已经封装了,我们如果需要Spark on Yarn,只需要yum安装几个包就可以了. 前面的文章我有写过如果搭建自己内网的CDH Yum服务器,请参考<CDH 5.5.1 Yum源服 ...