【问题标题】:JQuery to asmx fails on Windows 2008 R2 SP1在 Windows 2008 R2 SP1 上 JQuery 到 asmx 失败
【发布时间】:2011-03-28 08:21:30
【问题描述】:

自从安装 SP1 以来,我们在从 JQuery 客户端代码调用 asmx 页面时遇到了问题。

IIS 将 JQuery 后调用指向他的默认 404 页面。

我们对我们的环境进行了角色回溯,以断言此问题是由 SP1 引起的,并且测试证实了这一点。

等待修复@MS

使用的技术:

ASP.Net 4.0 - jQuery - IIS 7.5 - 视窗 2008 R2 SP1

--巴特

代码示例调用(前端):

  // Code to load vars...
  $.ajax({

              type: "POST",
              url: "/Handlers/ProductRating.asmx/RateProduct",
              data: "{'uniqueId':'" + uniqueId + "','productId':'" + productId + "','points':" + points.toString() + ",'showOwnScore':" + showOwnScore.toString() + "}",
              contentType: "application/json; charset=utf-8",
              dataType: "json",
              success: function(response) {
                   alert('success');
              },
              failure: function(msg) {
                alert('something went wrong');
              }
            });
        }

代码后端:

 [ScriptService]
public class ProductRating : System.Web.Services.WebService
{

    [WebMethod(EnableSession=true)]
    public RateProductResponse RateProduct(Guid uniqueId, Guid productId, int points, bool showOwnScore)
    {
       //Implementation
    }

快照 1:使用 SP1: http://img812.imageshack.us/i/capture2r.png/

快照 2:没有 SP1: http://img190.imageshack.us/i/capture1qx.png/

【问题讨论】:

  • 所以处理程序根本不会被调用?也许有一些默认的安全性或权限随着服务包的安装而改变?似乎很奇怪。唯一想到的是框架 3.5 更改,将 d 对象添加到来自 web 服务的 JSON 响应,但这似乎不是您的问题。
  • idd 我确认,处理程序从未调用...
  • 你可以直接从网络浏览器点击它吗?
  • "/Handlers/ProductRating.asmx" 可以命中。 "/Handlers/ProductRating.asmx/RateProduct" == 404
  • 听起来像是 IIS 配置问题。我敢打赌 SP2 更改了一些禁止此操作的默认安全设置。微软解决安全“问题”的一般方法似乎是禁用过去默认启用的东西......

标签: asp.net iis-7 windows-server-2008-r2


【解决方案1】:

我能够通过在我的 web.config 中添加以下内容来实现此功能

我看到另一个网站建议清除处理程序,但这让一切变得更糟。通过这次更新,我可以再次调用我的网络服务。

<system.webServer>
    <handlers>
        <add name="AsmxRoutingHandler" verb="*" path="*.asmx"  type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
</system.webServer>

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    创建一个包含以下行的 Web.Config 文件:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <location path="." inheritInChildApplications="false">
            <system.web>
                <httpHandlers>
                    <clear />
                    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                    <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
                </httpHandlers>
            </system.web>
        </location>
    </configuration>
    

    将其复制到您提供受影响脚本的目录中,然后重新启动您的网络服务器。

    这些行将覆盖您首选的 HttpHandlers 并将其设置为使用默认处理程序。

    祝你好运!

    【讨论】:

      【解决方案3】:

      从您的屏幕截图来看,这看起来很像 URL 重写问题。您的网站在 IIS 级别是否有任何过度贪婪的 URL 重写规则,可能是 302 重定向 /Handlers/ProductRating.asmx/RateProduct

      如果您确实有重写规则,是否可以尝试暂时禁用它们以查看是否可以解决 ASMX 问题?

      【讨论】:

        猜你喜欢
        • 2014-08-16
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 2012-12-16
        • 1970-01-01
        相关资源
        最近更新 更多