.Net Framework 2.0 使用WCF

起因:公司一个项目,采用VS2008开发,客户机配置参疵不齐,低配置不在少数。.Net Framework 3.5实在臃肿,安装太慢,又想用3.0的WCF进行分布式开发,于是就想到是否可以在.Net Framework 2.0上使用WCF。

思路:既然.Net Framework 3.0和3.5都是在2.0基础上的扩展,那么我们完全可以手工引用3.0以上的程序集(所有用到的),这有点类似于VB中引用OCX控件,用到哪个就引用那个。当然,不排除有某个程序集的依赖项也是3.0以上版本的,这就需要.Net Reflector 出马了。


步骤:

第一步:先在Vs2008中用默认的.Net Framework 3.5编写WCF程序(客户端和服务端均可),运行调试成功后降编译版本到2.0,然后会在引用中出现几个找不到的引用文件。

图1

将这些文件找出来,位置一般在两个文件夹里面,它们分别是“C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5”、“C:\WINDOWS\Microsoft.NET\Framework”。

把他们通过引用中的浏览加入到程序引用中(会弹出一警告窗口说该DLL或其依赖项之一要求的Framework版本比项目指定的版本高,忽略即可)。

图2

这时我们会发现该引用的路径仍然是“系统无法找到指定的引用”,要解决很简单——选中该引用,修改其属性的特定版本为True即可,同时设置复制本地属性为True。

图3

至此程序应该是可以成功运行了!生成程序后,我们要把Release文件夹中所有文件进行发布。记着一定要祭出.Net Reflector,挨个程序集看看是否有依赖项是3.0以上的,若有则Copy之。但是这样能在只有2.0的机器上顺利运行吗?未必!

第二步:这次来到只有2.0的机器上,运行程序,会出现一堆万恶的E文。

图4

大意是缺少配置文件之类的,其中有"ServiceModelReg.exe -i"字样。

那就依计行事——

在C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation中找到并执行

ServiceModelReg.exe -i

图5

然后再次运行程序,大功告成。

图6

重要声明:所谓的.net FrameWork 2.0务必是2.0 SP2。当时笔者在此纠结了很长时间,后来通过VS2008环境和纯2.0环境的比对才发现问题所在。VS2008中的2.0实际已经是SP2了(详细版本号是2.0.50727.3053),而我安装的测试环境只是2.0(详细版本号是2.0.50727.42),差别还是比较大的。


备注:VS2008和纯.NET 2.0的系统均为XP SP2,其他环境暂时没测试。这种方法ms也可以用到其他3.0以上的其他扩展程序集,比如3.5的Linq。


总结:

.net FrameWork 2.0库运行WCF客户端程序以下四要素:

1、客户端的.net FrameWork 2.0库必须为SP2,看详细版本号(SP2为2.0.50727.3053)。

2、通过浏览引用System.ServiceModel.dll,修改其属性中的特定版本为True,同时设置复制本地为True。

3、附带必要的程序集——

SMdiagnostics.dll

System.IdentityModel.dll

System.Runtime.Serialization.dll

System.ServiceModel.dll

System.ServiceModel.Install.dll (ServiceModelReg -i  ServiceModel注册必要程序集)

ServiceModelReg.exe  (ServiceModelReg -i 安装程序)

4、ServiceModelReg -i 进行注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值