【问题标题】:"ASP.NET Ajax client-side framework failed to load" with WCF - tried everything, still getting it“ASP.NET Ajax 客户端框架无法加载”与 WCF - 尝试了一切,仍然得到它
【发布时间】:2011-01-21 05:34:17
【问题描述】:

我现在收到“无法加载 ASP.NET Ajax 客户端框架”。我的 asp.net 4 网站一运行就出现 javascript 错误(打开登录页面)。

以前只有在调试时在浏览器中按 Ctrl-F5(刷新页面和所有图像/样式表/脚本)后才会发生这种情况。

我的应用程序使用 asp.net 4(最初在 1.1 或 2 上编写)、WCF、JsTree、一些 Telerik 控件和 MS AJAX 扩展/工具包。

在几天的谷歌搜索中,我发现了大量由有相同问题的人提供的解决方案(包括 SO 和 Telerik 的帮助论坛上的解决方案):

我尝试了以下方法,但没有一个对我有用:

  • 尝试在页面上放置 ToolkitScriptManager 而不是 ScriptManager
  • 进入“程序和功能”控制面板,对“Microsoft .net framework 4 Client profile”和“Microsoft .net framework 4 Extended”进行“修复”
  • 将 ScriptManager 移至页面底部
  • 在 Web.config 中,设置编译 debug="false"
  • 开始了一个新的 ASP.NET 4 项目,在页面中添加和更新了面板,查看了 web.config 并试图让我的 web.config 看起来更像它
  • 检查 PC 的系统日期是否正确
  • 在我的 web.config 中使用 location 元素来允许未经身份验证的访问 WebResource.axd、ScriptResource.axd 和 Telerik.Web.UI.WebResource.axd(我在这个站点中有 Telerik 控件)
  • 添加了路由。Ignore("{resource}.axd/{*pathInfo}");到我在 global.asax 中的路线注册

此问题还有其他解决方案吗?

如果需要,我可以发布 web.config 或代码。

更新 1:更多信息
我使用 firebug 的“net”选项卡查看了发生的情况。 对 ScriptResource.axd 和 Webresource.axd 的 GET 请求均以 404 失败。这是否进一步说明了这个问题?

更新 2:部分解决方案? 在将 WCF 服务添加到网站之前,我使用源代码控制历史将 web.config 恢复为原来的状态。最终起作用的 web.config 就在我添加这个之前:

<system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="FoldersAspNetAjaxBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
        <service name="Folders">
            <endpoint address="" behaviorConfiguration="FoldersAspNetAjaxBehavior" binding="webHttpBinding" contract="Folders" />
        </service>
    </services>
</system.serviceModel> 

...并从我的 global.asax 中删除了关联的路由线:

routes.Add(new System.ServiceModel.Activation.ServiceRoute("", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(Folders)));

所以其中一个或两个都是罪魁祸首。谁能建议 WCF 服务或其路由如何导致此 MS Ajax 错误?

这是我的第一个 WCF 服务。我几乎不明白上面的代码在做什么,但我怀疑路由问题是某个问题的核心......

交替 - 任何人都可以提出 WCF 的替代方案吗?如果我能以另一种方式将我的 JSON 数据传递给 jquery,我可以没有它。也许是HttpHandler,或者WebService,或者吐出JSON作为response.write之类的webform?

更新 2:路由
看起来 WCF 服务所需的 global.asax 中的路由内容是问题(见上文)。注释掉一行似乎可以解决问题。正在尝试更改路由路径...

已解决:我自己解决了,看看我接受的答案,但如果没有一些非常有见地的答案的正确建议,肯定不可能这么快完成,谢谢大家。

【问题讨论】:

    标签: wcf asp.net-4.0 routes scriptresource.axd


    【解决方案1】:

    安装可以将请求记录到服务器的浏览器扩展。例如,Firefox 的 FireBug。然后您需要检查浏览器向您的服务器发出的所有请求,看看是否有任何错误或响应太短。

    【讨论】:

      【解决方案2】:

      不确定 ajax 错误,但是如果您正在处理简单的 xml / json web 服务,你真的不需要 wcf...我已经用 restful xml / json webservices 替换了我们大多数基于 wcf 的服务...这些服务中的大多数实际上是一个简单的 aspx 文件,我在其中以 xml / json 格式输出结果

      .net 框架带有内置的 xml / json 读取器和写入器,您可以使用它们将数据结构(如果有)转换为 xml / json

      一个示例:您可以使用 XmlTextWriter 类直接写入 Response.OutputStream。例如:

      XmlTextWriter xtw = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
      xtw.WriteStartDocument();
      

      【讨论】:

        【解决方案3】:

        您几乎可以肯定不用 WCF。添加一个简单的 Web 服务,并为要为 JSON 或 XML 进行的每个异步调用添加一个方法。您需要了解的两个属性是WebMethodscriptservice

        通过 jQuery can be found here 使用它们的演练

        【讨论】:

          【解决方案4】:

          这两个处理程序可能已被 WCF 劫持。您可以尝试手动重新添加处理程序。如果你合并

          <httpHandlers>
            <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/>
          </httpHandlers>
          

          对于您的网络配置,WebResource.axd 是否仍返回 404?

          【讨论】:

          • 好的,我的 WCF 路由和 ajax 之间肯定存在某种冲突。我已经用更多信息更新了这个问题。
          【解决方案5】:

          我认为问题与.net框架版本的变化有关。

          错误是无法加载客户端库。还有一些 404 错误表明问题是文件未从服务器检索。

          所以所有的鸭子都需要排成一排:

          • 正确版本的 asp_net 已注册
          • web.config 中的设置使用正确的框架版本
          • 应用程序池配置为使用正确版本的框架

          【讨论】:

            【解决方案6】:

            在我的例子中,真正解决它的是改变我调用 WCF 服务的方式。

            从我在 WCF 上阅读的教程中,我错过了不需要在 Global.asax 中路由来调用 Web 服务的事实,我可以这样称呼它:

            http://localhost/myWebApp/WcfService.svc/MethodName?param=value

            (我一直依赖 global.asax 中的路由让我这样称呼它: http://localhost/myWebApp/MethodName?param=value 。我去掉了路由,改用上面的方式,问题就消失了)

            感谢所有有见地的回答。

            【讨论】:

              【解决方案7】:

              我遇到了问题。这是由于从 global.asax 文件路由,所有脚本都重定向到其他页面,因此很难找到该页面的 ajax 脚本文件。

              【讨论】:

                猜你喜欢
                • 2011-04-11
                • 2011-04-20
                • 2023-03-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-09-14
                相关资源
                最近更新 更多