delphi调用wcf

发布时间:2010-12-02


Povoz
I'm Sean Lu, thank you for your access my space. Starting WCF Client Programming in Delphi 7

虽然Delphi 2007已经发布一年有余,但是在实际的工作中仍然是Delphi 7或更早的版本被大量使用。
WCF作为构建面向服务应用程序的统一框架,成为多年来Microsoft .NET发展过程中最重要的技术之一。
我是最近才开始关注WCF的,作为Microsoft分布式应用程序开发的集大成者,我首先想到的就是能否在以前的旧系统中使用WCF
经过几天的摸索,终于成功地使用Delphi 7访问WCF服务,下面就来说一下开发过程。

1.更新Delphi SOAP Runtime and Importer
这一点非常的注要,因为原本Delphi 7自带的WSDLImp.exe无法正确生成WCF服务代理。CodeGear官方已经给出了更新,而且可以免费下载。 下载地址:http://cc.codegear.com/Item/24535
下载后的更新安装过程,请参照文件包中的readme.html文件。

2.为了测试,先在Visual Studio 2008中创建一个简单WCF服务。 A.新建WCF服务网站;



B.定义服务接口;这里我们简单的做一个加法运算,在IService.cs文件中加入下面代码: // 任务: 在此处添加服务操作 [OperationContract] int Add(int a, int b;
C.实现服务接口;在Service.cs文件中加入下面代码: #region IService 成员 public int Add(int a, int b { return a + b; } #endregion

D.修改服务的Binding属性为basicHttpBinding
可以直接修改Web.config文件,或通过Microsoft Service Configuration Editor进行编辑,打开Microsoft Service Configuration Editor(工具菜单->Microsoft Service Configuration Editor),然后打开我们的站点(Microsoft Service Configuration EditorFile菜单->WebHosted Service...->选择我们建立的WCF服务网站)“Configuration”窗口中打开EndpointsServices -> Service -> Endpoints可以看到有两个Endpoint
其中一个的Binding属性为mexHttpBinding,保持不变,另外一个EndporintBinding属性默认为wsHttpBinding,将其修改为basicHttpBinding,保存并退出。




至此一个简单的WCF服务网站已经建立完成,可以通过 http://localhost/WCFService/Service.svc 查看。

3.生成WCF访问代理。
因为前面我们已经更新了Delphi SOAP Runtime and Importer现在可以在C:\Program Files\Borland\Delphi7\Bin找以WSDLImp.exe,更新后的版本为2.2.10138 命令提示符中输入:WSDLImp http://localhost/WCFService/Service.svc?wsdl 就可以在当前目录下生成一个Service.pas文件。

4.创建Delphi 7应用程序。
创建一个Delphi 7应用程序,并引入上面我们创建的Service.pas文件。然后在主窗体中加入测试代码:

procedure TForm1.Button1Click(Sender: TObject; var
a, b, c:Integer; begin
a := StrToInt(Edit1.Text; b := StrToInt(Edit2.Text;
c := GetIService.Add(a, b;
Label1.Caption := IntToStr(c; end;
到这里,通过Delphi 7访问WCF服务已经实现了。但是要说的是这仅仅是第一步,在Delphi 7中是否可以充分利用WCF服务的功能还有待进一步摸索。

45日更新:
进一步摸索尝试之后,发现Delphi自身的SOAP RuntimeWeb Service的新标准、特性支持并不好。
第三方库对SOAP也有支持,但效果并不理想。 Pure SOAP网络上有一些介绍,但没有找到下载。
IndySOAP目前版本是1.0,官方说明支持SOAP 1.2,但试用没有成功。 IP*Works支持SOAP,但仅限SOAP 1.1标准。

结论:在Delphi中仅能使用WCF中的基本功能,也就是兼容ASMX模式。

Tag标签: Delphi7,WCF Povoz (Sean Lu
关注 - 1 粉丝
- 0 关注博主
0 0



(请您对文章做出评价
« 上一篇:[工具推荐]pynpp - Python Plugins for Notepad++ » 下一篇:PyDev Console should support UTF-8
posted on 2008-04-04 10:17 Povoz (Sean Lu 阅读(1891 评论(11 编辑 收藏 所属分类: Distributed 评论

#1 2008-04-04 11:43 李战

支持,看在DELPHI的面上。

说实在,俺还不知道啥是WCF,俺要学新东西了。 回复 引用 查看
#2 2008-04-04 11:54 Yannic Yang

呵呵 我还在用Delphi6... 也看在Delphi的面子上支持

其实WCF使用basicHttpBinding就是普通的Web Service
理论上使用任何可以进行HTTP调用的语言都是可以访问的 包括js 回复 引用 查看
#3 2008-04-05 10:35 b4nc[未注册用户]
看在delphi的面上,支持一把。

还在用delphixd们,过的可好? 回复 引用
#4 2008-05-27 19:27 BruceZhou

收藏吧,我还在用D7D2007太恶啦,卸载3个小时都没卸掉,只好直接删啦,还是D7 引用 查看
#5 2008-07-01 15:30 我是无才[未注册用户]
DelphiXD过得不怎么样啊,维护着一堆D6的程序,又招不到新人来接手,只能慢慢的等客户都换软件了,何时是个头啊 回复 引用
#6 2008-08-16 11:19 daconglee[未注册用户] 我按你的方法试了,可是不能把值传递有WCF,数字每次都是0,字符串每次都是"",我用的是delphi7.0 vs2008开发的.net3.5 wcf;
还有就是我用这个新的WSDLImp 生成的调用web service文件也无法传值.delphi7自代的可以正常的调用web service 回复 引用
#7 2008-10-07 17:04 绝世无才



delphi7调用wcf没什么问题,但是向上传值就不行了, 对象,数组都无法传上去,这个问题让我头疼了很久

回复 引用 查看
#8 2009-06-20 01:11 guoke[未注册用户]
@绝世无才
上传问题解决了吗?我遇到同样问题,本质原因是WCF期待complex typechild element has xmlns inside,
But the delphi wsdlimp.exe generated proxy will emit xml with xmlns in complex type only

我还没有什么完美解决方案
Option1: hack delphi TRemotable library to emit right XML Option2: Let WCF accept both format XML

请问有人有完美解决方案吗? 回复 引用
#9 2009-08-04 18:41 5207

哇哦,悲惨的消息。。

看来要用 Delphiwcf交互有很大麻烦了。。 回复 引用 查看
#10 2009-08-04 18:42 5207 @绝世无才
我觉得还是全部转成xml交互吧,最多也就基本类型的交互 回复 引用 查看
#11 2009-08-06 22:04 木头人abc[未注册用户] 我找到wcf basicHttpBinding delphi6互通解决方案了:WCF处必须指定namespace: [ServiceContract(Namespace="http://your.company.com"] [DataContract(Namespace = "http://your.company.com"]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, Namespace = "http://your.company.com"]
然后在patched wsdlimp.exe生成delphi code,可以在delphi6中使用 回复 引用 注册用户登录后才能发表评论,请 登录 注册返回博客园首页 IT新闻: · 诺基亚挖走微软Office部门总裁 Steven Elop · 分析师:苹果iTunes每年运营成本高达10亿美元 · 未来手机将成流动银行” ATM机可人脸识别 · 澳研究牵引光束实现1.5米外隔空取物

· 闲置eSATA接口影响Windows 7启动速度 更多IT新闻... 知识库最新文章: 如何走出海量数据及访问量压力困境
极限挑战C#+ODP 100万条数据导入Oracle数据库仅用不到1 漫谈.Net关键字系列之一SealedFinal 通过SQL Server 2008 访问Oracle 10g C#中使用#region指令的一些想法

网站导航:
博客园首页 IT新闻 个人主页 闪存 程序员招聘 社区 博问

China-pub 计算机图书网上专卖店!6.5万品种2-8折! China-Pub 计算机绝版图书按需印刷服务
相关搜索:
Delphi7 WCF Distributed
最简洁阅读版式:
Starting WCF Client Programming in Delphi 7 导航

博客园 首页 新随笔 联系 订阅管理



公告 粉丝 - 0 关注
- 1 我的主页 个人资料 我的闪存 发短消息

统计

随笔 - 4 文章 - 0 评论 - 18 引用 - 0
搜索
常用链接

我的随笔 我的空间 我的短信 我的评论 更多链接

我的标签

python(2 notepad++(1 Delphi7(1 WCF(1 Eclipse(1 PyDev(1 UTF-8(1 Delphi(1 调试(1 工具(1 更多

随笔分类(4

Delphi(1 (rss Distributed(1 (rss Python(1 (rss Tools(1 (rss


随笔档案(4

20084 (3 20083 (1
同在院子中
棕熊@Think Fast (rss 积分与排名

积分 - 5682 排名
- 9350 最新评论

1. Re:Starting WCF Client Programming in Delphi 7 我找到wcf basicHttpBinding delphi6互通解决方案了:在WCF处必须指定namespace: [ServiceContract(Namespace="] ...


2. Re:Starting WCF Client Programming in Delphi 7 @绝世无才我觉得还是全部转成xml交互吧,最多也就基本类型的交互

--木头人abc


3. Re:Starting WCF Client Programming in Delphi 7 哇哦,悲惨的消息。。 看来要用 Delphiwcf交互有很大麻烦了。。

--5207

4. re: Starting WCF Client Programming in Delphi 7
--5207 @绝世无才上传问题解决了吗?我遇到同样问题,本质原因是WCF期待complex typechild element has xmlns inside, But the delphi wsdlimp....


5. re: Starting WCF Client Programming in Delphi 7
delphi7调用wcf没什么问题,但是向上传值就不行了, 对象,数组都无法传上去,这个问题让我头疼了很久
--guoke --绝世无才


阅读排行榜

1. Starting WCF Client Programming in Delphi 7(1891 2. [工具推荐]pynpp - Python Plugins for Notepad++(1574 3. PyDev Console should support UTF-8(943 4. []通过崩溃地址找错误行数之Delphi(845
评论排行榜

1. Starting WCF Client Programming in Delphi 7(11 2. [工具推荐]pynpp - Python Plugins for Notepad++(5 3. []通过崩溃地址找错误行数之Delphi(1 4. PyDev Console should support UTF-8(1

Powered by: 博客园 Copyright © Povoz (Sean Lu

delphi调用wcf

相关推荐