续:如何解决《ASP.NET Webservice部署失败》

昨天,我们终于将这个问题给解决。问题的根源是由于Windows Server 2008(R2)的Service Pack1引起的。具体的信息,请参考以下两篇文章。

http://support.microsoft.com/kb/2520479

http://www.shanmcarthur.net/Default.aspx?DN=7d0cd525-bbc5-46c3-8096-95f93827aeea

 

在这里,我主要是讲述一下我们当时是如何去考虑这个问题的。

首先,客户投诉我们的安装程序有问题。根据他们提供的信息:1)服务器是新买的;2)NET Framework 和 IIS是新安装的且已经检测过没有问题;3)使用我们提供的安装程序进行安装,没有任何的定制化;4)在其他地方使用相同安装程序安装的站点没有此问题。

当时,我们的第一反应式:我们的安装程序是经过测试的,而且使用此安装程序的其他用户并不存在此问题,所以很可能是配置问题。那么,哪个地方出现了配置问题呢?如何去寻找线索和证据来证明那个配置问题?

第一个来回:按照正常流程检查用户的配置

1、站点所关联的NET Framework版本,结论是:NET Framework版本关联正确,并且他们又将NET Framework注册到IIS,并且重启了IIS

2、检查IIS中的Http Request Handler: WebServiceHandlerFactory-ISAPI及其配置,结论是:Http Request Hanlder的配置也是正确的

3、检查从客户端是否能访问WebService文件,结论是:依然不能通过在Webservice.aspx后面加/jsdebug访问到Net Framework 生成的JS文件

第二个来回:在IIS里面进行检测能否访问WebService件以及可能的错误信息。

1、直接用IIS Manager 里面访问WebService文件

注意:以下三幅图只是一个试验,我已经将WebServiceHandlerFactory-ISAPI-4.0_32bit 和 WebServiceHandlerFactory-ISAPI-4.0_64bit 删除,以此模拟处理WebService的Handler已经被破坏。

image

image

image

结论是:在客户的服务器里面,错误信息是不一样的,依然是无法找到那个文件。

第三个来回:为什么IIS没有生成JS文件

当时我给大家的分析是这样的:到底是IIS没有接收对.asmx文件的请求呢?还是Http Request Handler没有正常处理呢?如果是前者,那么在IIS Log里面一定没有对.asmx文件的日志记录;如果是后者,在System Event里面一定有相应的Log,肯定是我们忽略了什么东西。当然,我们也怀疑过可能是权限导致的。

1、检查IIS中的所有关于权限的设置,结论是正常的。

2、检查IIS Log,结论是IIS正常接收对.asmx文件的请求,并且记录在日志文件中

3、检查System Event Log,无意中发现相关的信息,如下图。因为之前见过这个错误信息"Server cannot append header after HTTP headers have been sent.”很多次,也知道原因,所以一直没有太在意。实在找不到原因,我们就做出了一个假设:假设这个问题是由于那个Http Module引起的,那么我们不使用那么HttpModule之后,问题是否还会存在呢?结论是:问题消失。

image

第四个来回:问题的根源真的是由于我们使用的那个特别的Http Module类吗?那么为什么我们本地相同的环境不能重现?

1、检查服务器的操作系统版本,结论是:本地是Windows Web Server 2008 plus sp1,不存在类似问题;IST服务器是Windows Server 2008 R2 plus SP1,不存在类似问题;存在问题的服务器是Windows Server 2008 R2 plus sp1.

2、本地安装相同的服务器操作系统和补丁,重新测试。结论是:问题还是不存在。换句话说,并不是我们所采用的Http Module引起的。那是什么原因呢?大家请看我之前写的一篇文章《已解问题:ASP.NET Webservice部署失败》中的最后一张图片,因为我们在每一次安装后,都会习惯性的将ExtensionlessUrlHandler-ISAPI-4.0_32bit 和 ExtensionlessUrlHandler-ISAPI-4.0_64bit 删除。如果我们没有删掉,这个问题就可以重现了。接下来,经过验证和测试,证明的确和那里有关系,于是我们开始思考我们为什么每次都会习惯性的将这两个ExtensionlessUrlHandler-ISAPI-4.0_32bit 和 ExtensionlessUrlHandler-ISAPI-4.0_64bit  删掉的原因,主要是为了解决缺省主页的问题。也就说,不确定和我们目前所遇到的问题是否存在关系,于是寻找资料,发现以下两篇文章。

http://support.microsoft.com/kb/2520479

http://www.shanmcarthur.net/Default.aspx?DN=7d0cd525-bbc5-46c3-8096-95f93827aeea

 

思考:

1、为什么我们需要经历这么多的来回交流?

2、为什么我们没有在本地重现?

你可能感兴趣的:(.net,webservice,WebService封装)