2009-02-10 34 views
0

我们有一个web应用程序,我们正在使用global.asax进行url重写。我们在实时服务器上使用该网站的编译版本。global.asax没有更新

作为修改请求的一部分,我们必须添加一些自定义本机AJAX代码,其中javascript将调用web服务来更新页面的内容。为了能够使用扩展名.asmx调用webservice,我们修改了url重写代码以分别处理asmx请求。

这种安排在本地机器上工作正常,但是当我们发布站点并将其部署到实时服务器上时,新代码似乎并未包含在内。它仍然会跳过检查“.asmx”扩展名的条件,并且会将webservice名称视为页面名称,从而引发未发现的页面异常。

我们已经试过寻找所有的东西,并搜索了这样的东西以及..但没有效果。 什么可能会出错哪些指针..?

+0

通过本地计算机,您是指集成开发服务器上还是本地IIS服务器上的本地计算机? – Loki 2009-02-10 08:43:17

回答

0

假设你的URL重写是好的(是不是通常实现为HttpModule?)我会检查以确保IIS中有一个ISAPI映射生产发送.asmx请求到ASP.NET。

如果您认为您对global.asax所做的更改没有被重新编译,那么您可以随时停止应用程序池,在c:\ windows \ microsoft.net \ framework [version] \中找到您的web应用程序编译位,临时的asp.net文件...并删除jitted版本。我之前看到ASP.NET发生Jitting变更时错过了。

我也考虑在调用Web服务的页面之一上运行http fiddler(IE)或篡改数据(FireFox扩展)。它会告诉你网页是如何调用Web服务的,并且你可以验证被调用的URL是否正确。

+0

是的,我们检查了它..其中.. – 2009-02-10 08:36:26

+0

也..网址重写工作正常所有其他请求。 我们怀疑global.asax在我们发布网站时没有被修改,它以某种方式使用旧版本的相同.. – 2009-02-10 08:39:34

0

有一个machine.config文件,您可以在其中添加HttpModules。我也认为你可以通过web.config来做到这一点。

0

我能想到的一个原因是,在Web.config中,您可能已在system.web部分中配置了路由模块,但在system.webServer(或至少忘记了那里)中没有配置路由模块。

我以前类似的问题和解决办法是删除模块&在Web.config像这样的system.webServer节再次添加:

<system.webServer> 
    <modules> 
     <remove name="UrlRoutingModule" /> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, e="RoleManager" type="System.Web.Security.RoleManagerModule"/> 
    </modules> 
</system.webServer> 

这可能是一个不同的模块或处理,但想法基本相同。首先“移除”模块非常重要。