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 Editor的File菜单->WebHosted Service...->选择我们建立的WCF服务网站),在“Configuration”窗口中打开Endpoints(Services -> Service -> Endpoints),可以看到有两个Endpoint,其中一个的Binding属性为mexHttpBinding,保持不变,另外一个Endporint的Binding属性默认为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服务的功能还有待进一步摸索。

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模式。
Tag标签: Delphi7,WCF

posted on 2008-04-04 10:17 Povoz (Sean Lu) 阅读(1278) 评论(7)  编辑 收藏 网摘 所属分类: 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的面上,支持一把。

还在用delphi的xd们,过的可好?   回复  引用    

#4楼  2008-05-27 19:27 BruceZhou      

收藏吧,我还在用D7,D2007太恶啦,卸载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文件也无法传值.用delphi7自代的可以正常的调用web service   回复  引用    

#7楼  2008-10-07 17:04 绝世无才      


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

  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-05 12:40 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 




导航

统计

与我联系

搜索

 

常用链接

留言簿(2)

我的标签

随笔分类(4)

随笔档案(4)

同在院子中

积分与排名

最新评论

阅读排行榜

评论排行榜