我们有一个Web应用程序,我们使用global.asax进行url重写。我们在实时服务器上使用该网站的编译版本。
作为修改请求的一部分,我们必须添加一些自定义本机AJAX代码,其中javascript将调用webservice来更新页面内容。为了能够使用扩展名.asmx调用webservice,我们修改了url重写代码以单独处理asmx请求。
这种安排在本地计算机上运行良好,但是当我们发布站点并将其部署在实时服务器上时,新代码似乎不会被包含在内。它仍会跳过检查“.asmx”扩展名的条件,并将Web服务名称作为页面名称抛出页面未找到异常。
我们已经尝试过全面搜索并搜索这些东西......但无济于事.. 任何可能出错的指针......?
答案 0 :(得分:0)
假设您的URL重写是好的(通常不是作为HttpModule实现的吗?)我会检查以确保生产中的IIS中有一个ISAPI映射,它将.asmx请求发送给ASP.NET。
如果您认为您对global.asax的更改尚未被重新安装,那么您可以随时停止应用程序池,在c:\ windows \ microsoft.net \ framework [version] \ temporary中找到您的Web应用程序编译位asp.net文件...并删除jitted版本。我之前看到过关于Jitting更改的ASP.NET漏洞。
我还考虑在其中一个调用Web服务的页面上运行http fiddler(IE)或篡改数据(FireFox扩展)。它将准确地告诉您页面如何调用Web服务,并且您可以验证被调用的URL是否正确。
答案 1 :(得分:0)
有machine.config文件,您可以在其中添加HttpModules。我也认为你可以通过web.config做到这一点。
答案 2 :(得分:0)
我能想到的一个原因是,在Web.config中,您可能已在system.web
部分配置了路由模块,但未在system.webServer
中配置(或者至少忘记了某些内容)。
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>
它可能是一个不同的模块或处理程序,但这个想法基本相同。首先“删除”模块非常重要。