同事向我反映服务器上的一个WebService的调用没有成功。查看了一下调试信息,在执行MSSoapInit2后返回了值0x80040154,错误信息是没有注册类。
重新注册了MS SOAP Toolkit的相关控件,错误依然存在。于是怀疑是XML组件的问题,使用一个简化的inf进行xml相关控件的安装,还是没有解决。手工注册system32目录下的msxml4.dll,却收到提示dll文件加载失败,在Depends里面也显示不出任何文件依赖。难道是Dll文件损坏了?从其他地方拷贝过来,注册,依然提示Dll文件加载失败。于是老老实实的安装MSXML4.0 Parser and SDK。再试,WebService调用成功。
这时候想起来看一下操作系统的版本,是64位的Windows Server 2008。按照经验是Dll的路径不对,32位的Dll文件应该放到C:\Windows\SysWow64目录里。于是想重现一下错误,卸载MSXML4.0 Parser and SDK。再次拷贝msxml4.dll到system32目录下,进行注册。按照前面的情况来看,应该会注册失败。不过奇怪的是居然注册成功了。Depends里面也正常显示出了组件的依赖关系。注册失败的情况居然无法重现了?反复安装卸载MSXML4.0 Parser and SDK,也尝试手工注册,反注册SysWow64和system32下的msxml4.dll,始终不再出现注册失败的情况,真是令人费解。