【问题标题】:AjaxPro is working locally, but on server I am getting .ashx errorsAjaxPro 在本地工作,但在服务器上我收到 .ashx 错误
【发布时间】:2009-02-09 20:10:27
【问题描述】:

在本地我的应用程序使用 ajaxpro 可以正常工作,但在服务器上我似乎无法弄清楚它为什么不工作。

使用 firebug 我有以下错误:

GET prototype.ashx 404 未找到 GET core.ashx 404 未找到 GET ms.ashx 404 未找到

相同的代码在本地工作,所以它必须是 IIS7 设置?

编辑,我的 web.config

<httpHandlers>
            <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
        </httpHandlers>

还有:

<location path="ajaxpro">
        <system.web>
            <httpHandlers>
                <add verb="POST,GET" path="*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
            </httpHandlers>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </location>

和:

<location path="ajaxpro/prototype.ashx">
        <system.web>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </location>
    <location path="ajaxpro/core.ashx">
        <system.web>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </location>
    <location path="ajaxpro/converter.ashx">
        <system.web>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </location>

【问题讨论】:

    标签: ajaxpro


    【解决方案1】:

    要让 AjaxPro.dll 在 IIS7 中工作,您应该将应用程序池的 PipelinMode 设置为 Classical 而不是 Integrated。

    我到处找这个,但最后这救了我。

    【讨论】:

      【解决方案2】:

      要在 IIS7(即 Windows Vista)上以集成模式而不是经典模式运行 Ajax.NET,您必须检查两件事:

      1. 首先检查 IIS_ISSRS 组是否有权访问您的网站文件夹。如果您使用 Visual Studio .NET 2005 的网站默认文件夹,最简单的方法是在 C:\Users\Username\Documents\Visual Studio 2005\WebSites 中添加读取权限。
      2. 运行以下命令以自动迁移您的 web.config 文件: %windir%\system32\inetsrv\Appcmd 迁移配置“”

      Ajax.NET Professional 的重大变化是您必须将 httpHandler(和 httpModule,如果使用)移动到新的部分 system.webServer 并将 httpHandler 重命名为 handler;接下来你必须为处理程序添加一个名称属性:

      <configuration>
      
          <location path="ajaxpro">
              <system.webServer>
                  <handlers>
                      <add verb="*" path="*.ashx" name="AjaxPro" 
                           type="AjaxPro.AjaxHandlerFactory,AjaxPro.2" />
                  </handlers>
              </system.webServer>
          </location>
      
      </configuration>
      

      【讨论】:

      • 这只是从谷歌复制粘贴。但是,如果您确实使用它,请注意组名是 IIS_IUSRS 而不是 IIS_ISSRS。
      • 感谢您对模式的注意。我刚刚注意到我的 DefaultAppPool 在 Classic 中需要它时处于集成状态。这为我解决了这个问题。
      【解决方案3】:

      您确定已在 web.config 文件中正确注册了处理程序吗?

      您的 web.config 文件中应该有如下所示的内容。

      <location path="ajaxpro">
          <system.web>
              <httpHandlers>
                  <add verb="*" path="*.ashx"
                       type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
              </httpHandlers>
          </system.web>
      </location>
      

      您的 Bin 目录中还需要有 AjaxPro dll(至少对于网站而言)。

      【讨论】:

        【解决方案4】:

        几个小时以来,我一直在努力解决这个问题,我想我可能刚刚找到了一个解决方案……而且,更糟糕的是……令人沮丧。

        在web.config、system.webServer/handlers中,可能有不止一项处理*.ashx

        例如:

        <add name="AjaxPro" verb="POST,GET,HEAD" path="ajaxpro/*.ashx" ...
        <add name="SimpleHandlerFactory-Integrated" path="*.ashx" ...
        <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" ...
        <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" ...
        

        如果 ajaxpro 条目低于这些,它将不会被使用,因为这些条目首先匹配。 将 ajaxpro 条目移到其他条目上方可能会解决问题。

        我不知道为什么 cassini 不介意,但 IIS7 却...

        【讨论】:

        • 我在已经工作多年的处理程序上遇到 404 错误,结果证明它们被这些以某种方式进入 IIS 的 SimpleHandlerFactory 处理程序所覆盖。注意覆盖处理程序!
        【解决方案5】:
        <configuration>
        
            <location path="ajaxpro">
                <system.webServer>
                    <handlers>
                        <add verb="*" path="*.ashx" name="AjaxPro"
                             type="AjaxPro.AjaxHandlerFactory,AjaxPro.2" />
                    </handlers>
                </system.webServer>
            </location>
        
        </configuration>
        

        Windows 2008 \ IIS 7 默认情况下没有为使用 Ajax 设置 axd 处理程序映射,因此如果您想使用 Ajax 并且在我们的 Windows 之一上,则需要将以下代码放入您的 web.config 文件中2008 年托管计划。

        <system.webServer>
                <handlers>
                    <add name="Ajax" path="*.axd" verb="*" modules="IsapiModule"
        scriptProcessor="C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"
        resourceType="Unspecified"
        preCondition="classicMode,runtimeVersionv2.0,bitness32" />
                </handlers>
        </system.webServer>
        

        或将 .dll 复制到 bin 文件夹并尝试:

        <httpHandlers>
        <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>
        
        </httpHandlers> in <system.web>
        

        【讨论】:

          【解决方案6】:

          我只是遇到了同样的错误,但可能与您的原因不同。我在一个新网站上得到它(在本地运行),因为该网站使用了一个不排除 .ashx 的自定义 url 重写模块!

          所以我的解决方案是确保重写模块排除带有 .ashx 的路径...

          【讨论】:

            【解决方案7】:

            将我的网络表单迁移到 MVC 4 后,我收到了这个错误(ajaxpro/core.ashx 404 not found)

            我解决了这个问题,将这一行添加到我的 app_start/routeconfig

            routes.IgnoreRoute("ajaxpro/{*pathInfo}");
            

            我的 web.config 不需要额外的声明,但这个

            <httpHandlers>
                    <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
                </httpHandlers>
            

            当然,还有对放在我的 bin 文件夹中的 ajaxpro.2.dll 的引用

            希望对你有用!

            【讨论】:

              猜你喜欢
              • 2012-08-08
              • 2020-11-06
              • 1970-01-01
              • 2020-11-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-14
              • 1970-01-01
              相关资源
              最近更新 更多