0

我们有一个 Web 应用程序,我们在其中使用 global.asax 进行 url 重写。我们在实时服务器上使用网站的编译版本。

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

这种安排在本地机器上运行良好,但是当我们发布站点并将其部署在实时服务器上时,似乎没有包含新代码。它仍然会跳过检查“.asmx”扩展名的条件,并抛出一个找不到页面的异常,考虑到 web 服务名称作为页面名称。

我们已经尝试过到处寻找并在谷歌上搜索这些东西..但无济于事..任何可能出现问题的指针..?

4

3 回答 3

0

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

如果您认为您对 global.asax 的更改没有被重新调整,那么您可以随时停止应用程序池,在 c:\windows\microsoft.net\framework[version]\temporary asp.net 中查找您的 Web 应用程序编译位文件...并删除jited版本。我以前在 Jitting 更改方面看到过 ASP.NET 错过。

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

于 2009-02-10T08:31:10.943 回答
0

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

于 2009-02-10T08:55:35.100 回答
0

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

我之前遇到过类似的问题,解决方案是删除模块并在system.webServerWeb.config 的部分中再次添加它,如下所示:

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

它可能是不同的模块或处理程序,但想法基本相同。首先“删除”模块很重要。

于 2009-02-10T09:08:06.037 回答