【转】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会询问你是否建立接口单元,选择是,然后输入接口的名字,我们输入MainDelphi将自动建立接口单元(名字为你输入的接口名+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就算发布成功了,如果IIS6.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,如后提示输入网址,我们输入刚才复制的网址,点击nextfinish,此时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有很多麻烦

时间: 2024-10-07 05:06:30

【转】Delphi调用webservice总结的相关文章

Delphi调用webservice总结

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控件的属性:

Delphi调用WebService(通过SoapHeader认证)经验总结

项目(Delphi开发)需要调用另一个系统的WebService.走了不少弯路,现记录总结一下经验.以下是WebService要求: 1.WebService概述 营销Webservice接口采用Apache Axis(version 1.4)技术实现.客户端和服务器用SOAP(Simple Object Access Protocol)协议通过HTTP来交互,客户端根据WSDL描述文档生成SOAP请求消息发送到服务端,服务端解析收到的SOAP请求,调用Web service,然后再生成相应的S

delphi 调用 webservice (.NET C#版)

1 uses XMLIntf, XMLDoc; 2 3 4 5 XML to XTR文件转换 6 7 8 9 1.File-->open打开你要分析的XML文件 10 2.在左边选择你要分析的接点,双击加到中间的转换列表中 11 3.Create-->DataPacket from XML 12 4.Create and Test Transformation 13 5.file-->save-->Transformation得到一个.xtr的文件 14 6.打开.xtr文件,第一

delphi 调用百度地图WEBSERVICE转换GPS坐标

百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者xml格式). 注:本接口支持回调. 服务地址 http://api.map.baidu.com/geoconv/v1/? 组成说明: 域名:http://api.map.baidu.com 服务名:geoconv 服务版本号:v1 服务参数说明 参数 含义 取值范围 是否必须 默认取值 coord

delphi调用 java 的 WebService服务端.

// InvRegistry.RegisterInvokeOptions(TypeInfo(ModelADServicePortType), ioLiteral); InvRegistry.RegisterInvokeOptions(TypeInfo(ModelADServicePortType), ioDocument); delphi调用 java 的 WebService服务端.,布布扣,bubuko.com

(转)Delphi 调用C#编写的WebService 参数为Null解决方法 附中文乱码问题

(转)Delphi 调用C#编写的WebService 参数为Null解决方法 附中文乱码问题 //add-------to support UTF-8     RIO.HTTPWebNode.UseUTF8InHeader := true;  //添加该行,指定采用UTF-8代码传输     RIO.Converter.Encoding:='UTF-8';     RIO.Converter.Options:=RIO.Converter.Options + [soUTF8InHeader,so

?Delphi开发WebService给ASP.NET调用

Delphi开发WebService给ASP.NET调用 说明: 1.本文档分3个部分,分别为: 用Delphi编写WebService 在IIS下部署WebService 在ASP.NET中调用webservice 2.开发环境为Windows XP SP2.Delphi 7.0.IIS 5.1.VS 2008(C#) 一.用Delphi编写WebService 第1步:File → New → Other → WebServices → SOAP Server Application 第2步

Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)

相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/article/details/8764165 注意事项: 1.生成WSDL文件时,D7可能有的无法生成,用XE版本可以全部生成. 返回字节流: 1 function GetByte(AString: string): TByteDynArray; 2 var 3 sByte: TByteDynArray;

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com