最近有个项目给客户做系统接口,其实也就是Webservice了。20几个接口,花了3天左右的时间(不知道是快还是慢,同事说挺快,不知道是真是假。)把整个框架和接口功能相关接口文档都完成了(接口文档现有模版,直接填写即可)。离客户预定的时间点还有3、4天。自己想着在自己机器上都测试通过,并无发现啥问题,也就没有太紧张。想着今天去客户测试服务器上部署一下,让客户来测试、测试。
于是乎一大早起来步行。。。公交。。。地铁。。。
终于到了,和客户接上头:先把接口文档给客户,自己就开始在测试服务器上部署。。。(今天的杯具开始了。。。)
首先说明一下本机环境:
WIN7 X64
Oracle Client 11gR2
Oracle.DataAccess.dll 版本 2.112.2.0
客户测试服务器环境:
WIN 2008 R2(好像只有X64的)
Oracle 11g
第一次部署:
信心满满的去准备部署,IIS中添加好应用程序,在IE中开始测试服务。杯具发生。。。报错。
冒汗啊。查看服务器配置,发现IIS中都未安装ASP.NET等支持。赶紧安装、配置。
再浏览测试。杯具再次发生。。。。
汗再次冒出来,客户就在旁边看着。。。丢人丢大了。。。
仔细想想以前好像遇见过这个问题,是否是测试服务器上的Oracle.DataAccess.dll是32位版本的,而IIS中应用程序池却使用的是64位的,修改IIS应用程序池设置就行了。
还一边和客户,一边心里想着这下应该没有问题了吧。
再浏览测试。杯具再次发生。。。
汗完全留下来了。。。当时就想找个洞钻下去。太丢人了!回到自己开发机器上,排错去。
第二次部署:
在开发机器上看了Oracle.DataAccess.dll 版本是2.112.1.2 ,测试服务器上的是2.112.1.0。杯具。。。找到原因了,两个版本号不一致。而且发现客户机上无64位的Oracle.DataAccess.dll.
IIS中只能开始32位应用程序支持。赶紧找解决办法:
解决办法就是在web.config中修改,在configSections节点结束之后增加如下内容:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess"
publicKeyToken="89B483F429C47342"
culture="neutral" />
<bindingRedirect
oldVersion="2.112.1.2"
newVersion="2.112.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
再次在测试服务器上部署。
再浏览测试。这次终于看到了好像正确的WebService界面,此时和客户说部署好了,让他可以测试一下。客户耐着性子说他远程来测试一下。
这次杯具再次发生了。。。今天真的是倒霉的一天。
在客户远程的客户机上不可以调用测试,显示错误:
“返回信息“测试窗体只能用于来自本地计算机的请求。”
今天是栽了!!!
第三次部署:
上面那个问题是WEB.CONFIG中没有做设置。加入
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>
客户端远程可调用测试。
至此。今天丢人到此结束。感觉做事还是要踏实和认真,不能有马虎,一定要做好充足的准备。