这个黄金周闷在家中,开始了对Windows Communication Foundation的学习之旅,在Google上搜索了一下相关的安装资料,在微软的网站上下载了相关工具后在全新的Windows2003环境下进行了安装。
首先安装了WinFX Runtime Component 3.0 Beta2,然后安装Microsoft Windows SDK for the February 2006 CTP,整个安装过程相当顺利,其他相关工具安装完毕后,按照http://windowscommunication.net/ 上的例子开始尝试Hello WCF,Service端的代码写完,执行测试成功。然后按照文章介绍写客户端的访问代码,这时问题来了。
按文章介绍,先要使用svcutil命令生成客户端访问的Proxy类,但在Command窗口实际执行svcutil命令时却直接报错,提示svcutil引用的版本错误。使用Reflector查看svcutil,发现它引用的System.ServiceModel版本是3.0.0.0,而我机器的GAC上的System.ServiceModel版本则是2.0.0.0的,导致svcutil执行时的错误。
尝试先用ildasm命令将svcutil.exe反汇编成il文件,将System.ServiceModal的引用版本改成2.0.0.0,去掉svcutil的public key信息,再重新编译svcutil。这回直接执行svcutil成功,能正常显示帮助信息,但使用命令生成Proxy文件(如键入svcutil http://localhost/helloservice?wsdl)时仍然会出错,看来System.ServiceModal的2.0.0.0和3.0.0.0的版本之间的确有差别,不能张冠李戴。
在Google上没找到相关的解决方法,无奈之下祭起重装大法,先卸载了WinFX Runtime Component,然后重新安装,GAC上的System.ServiceModel居然神奇的变成了3.0.0.0版本,svcutil工具也终于能正常使用了。看来WinFX Runtime Component在安装时会收集相应的SDK安装的版本信息,以决定下载System.ServiceModel的版本,之前由于未安装Windows SDK,所以安装的是2.0.0.0版本,而在安装过Windows SDK后,安装程序则会下载对应的3.0.0.0版本。各位在安装学习时的确需要注意了。
SvcUtil版本问题的解决
最新推荐文章于 2025-07-04 07:01:21 发布