1、PovozIm 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。经过几天的摸索,终于成功地使用 Delp
2、hi 7 访问 WCF 服务,下面就来说一下开发过程。1.更新 Delphi SOAP Runtime and Importer。这一点非常的注要,因为原本 Delphi 7 自带的 WSDLImp.exe 无法正确生成 WCF 服务代理。CodeGear 官方已经给出了更新,而且可以免费下载。下载地址:http:/ readme.html 文件。2.为了测试,先在 Visual Studio 2008 中创建一个简单 WCF 服务。A.新建 WCF 服务网站;B.定义服务接口;这里我们简单的做一个加法运算,在 IService.cs 文件中加入下面代码:/ 任务: 在此处添加服务操作Oper
3、ationContractint Add(int a, int b);C.实现服务接口;在 Service.cs 文件中加入下面代码:#region IService 成员public int Add(int a, int b) return a + b;#endregionD.修改服务的 Binding 属性为 basicHttpBinding;可以直接修改 Web.config 文件,或通过 Microsoft Service Configuration Editor 进行编辑,打开 Microsoft Service Configuration Editor(工具菜单-Microsoft
4、 Service Configuration Editor),然后打开我们的站点( Microsoft Service Configuration Editor的 File 菜单-WebHosted Service.-选择我们建立的 WCF 服务网站),在“Configuration”窗口中打开 Endpoints(Services - Service - Endpoints),可以看到有两个 Endpoint,其中一个的 Binding 属性为 mexHttpBinding,保持不变,另外一个Endporint 的 Binding 属性默认为 wsHttpBinding,将其修改为 basi
5、cHttpBinding,保存并退出。至此一个简单的 WCF 服务网站已经建立完成,可以通过 http:/localhost/WCFService/Service.svc 查看。3.生成 WCF 访问代理。因为前面我们已经更新了 Delphi SOAP Runtime and Importer,现在可以在C:Program FilesBorlandDelphi7Bin 找以 WSDLImp.exe,更新后的版本为2.2.10138。在“命令提示符”中输入:WSDLImp http:/localhost/WCFService/Service.svc?wsdl 就可以在当前目录下生成一个 Serv
6、ice.pas 文件。4.创建 Delphi 7 应用程序。创建一个 Delphi 7 应用程序,并引入上面我们创建的 Service.pas 文件。然后在主窗体中加入测试代码:procedure TForm1.Button1Click(Sender: TObject);vara, b, c:Integer;begina := StrToInt(Edit1.Text);b := StrToInt(Edit2.Text);c := GetIService.Add(a, b); Label1.Caption := IntToStr(c);end;到这里,通过 Delphi 7 访问 WCF 服务已
7、经实现了。但是要说的是这仅仅是第一步,在Delphi 7 中是否可以充分利用 WCF 服务的功能还有待进一步摸索。4 月 5 日更新:进一步摸索尝试之后,发现 Delphi 自身的 SOAP Runtime 对 Web Service 的新标准、特性支持并不好。第三方库对 SOAP 也有支持,但效果并不理想。Pure SOAP 网络上有一些介绍,但没有找到下载。IndySOAP 目前版本是 1.0,官方说明支持 SOAP 1.2,但试用没有成功。IP*Works 支持 SOAP,但仅限 SOAP 1.1 标准。结论:在 Delphi 中仅能使用 WCF 中的基本功能,也就是兼容 ASMX 模式
8、。 Tag 标签: Delphi7,WCFPovoz (Sean Lu)关注 - 1粉丝 - 0关注博主0 0 (请您对文章做出评价) 上一篇: 工具推荐pynpp - Python Plugins for Notepad+ 下一篇: PyDev Console should support UTF-8posted on 2008-04-04 10:17 Povoz (Sean Lu) 阅读(1891) 评论(11) 编辑 收藏 所属分类: Distributed 评论#1 楼 2008-04-04 11:43 李战 支持,看在 DELPHI 的面上。说实在,俺还不知道啥是 WCF ,俺要学新
9、东西了。 回复 引用 查看 #2 楼 2008-04-04 11:54 Yannic Yang 呵呵 我还在用 Delphi6. 也看在 Delphi 的面子上支持 其实 WCF 使用 basicHttpBinding 就是普通的 Web Service 理论上使用任何可以进行 HTTP 调用的语言都是可以访问的 包括 js 回复 引用 查看 #3 楼 2008-04-05 10:35 b4nc未注册用户 看在 delphi 的面上,支持一把。还在用 delphi 的 xd 们,过的可好? 回复 引用 #4 楼 2008-05-27 19:27 BruceZhou 收藏吧,我还在用 D7,D2
10、007 太恶啦,卸载 3 个小时都没卸掉,只好直接删啦,还是 D7, 回复 引用 查看 #5 楼 2008-07-01 15:30 我是无才 未注册用户 Delphi 的 XD 过得不怎么样啊,维护着一堆 D6 的程序,又招不到新人来接手,只能慢慢的等客户都换软件了,何时是个头啊 回复 引用 #6 楼 2008-08-16 11:19 daconglee未注册用户 我按你的方法试了,可是不能把值传递有 WCF,数字每次都是 0,字符串每次都是“,我用的是delphi7.0 vs2008 开发的.net3.5 wcf; 还有就是我用这个新的 WSDLImp 生成的调用 web service 文
11、件也无法传值.用 delphi7 自代的可以正常的调用 web service 回复 引用 #7 楼 2008-10-07 17:04 绝世无才 用 delphi7 调用 wcf 没什么问题,但是向上传值就不行了,对象,数组都无法传上去,这个问题让我头疼了很久回复 引用 查看 #8 楼 2009-06-20 01:11 guoke未注册用户 绝世无才上传问题解决了吗?我遇到同样问题,本质原因是 WCF 期待 complex type 的 child element has xmlns inside, But the delphi wsdlimp.exe generated proxy will
12、 emit xml with xmlns in complex type only我还没有什么完美解决方案Option1: hack delphi TRemotable library to emit right XMLOption2: Let WCF accept both format XML请问有人有完美解决方案吗? 回复 引用 #9 楼 2009-08-04 18:41 5207 哇哦,悲惨的消息。看来要用 Delphi 与 wcf 交互有很大麻烦了。 回复 引用 查看 #10 楼 2009-08-04 18:42 5207 绝世无才我觉得还是全部转成 xml 交互吧,最多也就基本类型
13、的交互 回复 引用 查看 #11 楼 2009-08-06 22:04 木头人 abc未注册用户 我找到 wcf basicHttpBinding 和 delphi6 互通解决方案了:在 WCF 处必须指定namespace:ServiceContract(Namespace=“http:/“)DataContract(Namespace = “http:/“)ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, Namespac
14、e = “http:/“)然后在 patched wsdlimp.exe 生成 delphi code,可以在 delphi6 中使用 回复 引用 注册用户登录后才能发表评论,请 登录 或 注册,返回博客园首页。IT 新闻 : 诺基亚挖走微软 Office 部门总裁 Steven Elop 分析师:苹果 iTunes 每年运营成本高达 10 亿美元 未来手机将成“流动银行” ATM 机可人脸识别 澳研究“牵引光束” 实现 1.5 米外隔空取物 闲置 eSATA 接口影响 Windows 7 启动速度更多 IT 新闻. 知识库最新文章:如何走出海量数据及访问量压力困境极限挑战 C#+ODP 10
15、0 万条数据导入 Oracle 数据库仅用不到 1 秒漫谈.Net 关键字系列之一 Sealed 与 Final通过 SQL Server 2008 访问 Oracle 10gC#中使用#region 指令的一些想法网站导航:博客园首页 IT 新闻 个人主页 闪存 程序员招聘 社区 博问 China-pub 计算机图书网上专卖店!6.5 万品种 2-8 折!China-Pub 计算机绝版图书按需印刷服务相关搜索:Delphi7 WCF Distributed 最简洁阅读版式:Starting WCF Client Programming in Delphi 7导航 博客园 首页 新随笔 联系
16、订阅 管理 公告粉丝 - 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) 2008 年 4 月 (3)
17、2008 年 3 月 (1) 同在院子中 棕熊Think Fast (rss) 积分与排名 积分 - 5682 排名 - 9350 最新评论 1. Re:Starting WCF Client Programming in Delphi 7 我找到 wcf basicHttpBinding 和 delphi6 互通解决方案了:在 WCF 处必须指定 namespace: ServiceContract(Namespace=“) . -木头人 abc 2. Re:Starting WCF Client Programming in Delphi 7 绝世无才我觉得还是全部转成 xml 交互吧,最
18、多也就基本类型的交互 -5207 3. Re:Starting WCF Client Programming in Delphi 7 哇哦,悲惨的消息。 看来要用 Delphi 与 wcf 交互有很大麻烦了。 -5207 4. re: Starting WCF Client Programming in Delphi 7 绝世无才上传问题解决了吗?我遇到同样问题,本质原因是 WCF 期待 complex type 的 child element has xmlns inside, But the delphi wsdlimp -guoke 5. re: Starting WCF Client
19、Programming in Delphi 7 用 delphi7 调用 wcf 没什么问题,但是向上传值就不行了,对象,数组都无法传上去,这个问题让我头疼了很久 -绝世无才 阅读排行榜 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)