在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误

Posted

技术标签:

【中文标题】在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误【英文标题】:Javascript error when using Messenger Connect client-side library in ASP.NET 【发布时间】:2011-05-11 22:00:28 【问题描述】:

我在现有 Sitefinity 站点内实现新的 Messenger Connect 功能以启用使用 Live ID 的客户端登录时遇到问题。

也就是说,当我使用以下代码来实现客户端功能时:

<head runat="server">
  <script type="text/javascript" src="http://js.live.net/4.1/loader.js"></script>
</head>
<body>
  <form runat="server" id="form1">
    <asp:ScriptManager ID="ScriptManager1" runat="server"/>
    <wl:app
        client-id="<%= ConfigurationManager.AppSettings["wl_wrap_client_id"] %>"
        scope="WL_Profiles.View"
        callback-url="<%= ConfigurationManager.AppSettings["wl_wrap_client_callback"] %>?wl_session_id=<%=SessionId %>"
        channel-url="/channel.htm">
    </wl:app>

...我在 Firebug 中遇到三个我无法完全正确识别的错误:

Sys.ArgumentTypeException:“Sys._Application”类型的对象不能 转换为类型“Sys.IDisposable”。 参数名称:对象

(在 ScriptResource.axd?d=.... 第 4993 行)

Sys.Application._doInitialize 不是 功能

(在 MicrosoftAjaxBase.js 第 1 行)

Sys.InvalidOperationException: 脚本“MicrosoftAjaxGlobalization.js” 被多次引用。如果 引用 Microsoft AJAX 脚本 明确地,设置 MicrosoftAjaxMode ScriptManager 的属性 明确的。

(在 ScriptResource.axd?d=.... 第 984 行)

只有当我包含来自 js.live.net 的 loader.js 脚本时才会触发错误。

编辑:似乎错误不一定按该顺序触发。刷新页面似乎可以改变这些错误和/或引入其他错误,例如第 1842 行的 ScriptResource.axd?... 中的 Sys.ParameterCountException

【问题讨论】:

我也遇到过这个错误,还没有找到解决方案。似乎 Messenger Connect 使用了它自己版本的 AJAX 加载器功能,并且如果您将其用于其他事情(例如异步加载其他所有内容),它与现有版本不兼容。 看看这是否也有帮助,不管最初的罪魁祸首是否有帮助:***.com/questions/19103128/… 【参考方案1】:

嘿,我在这里尝试了一些组合,其中一个有效的是:

1) 设置ScriptManager的ScriptMode属性为Release

2) 在 CodeBehind Page_Load 事件中加载 MSN 库,使用 ClientScript 类:

protected void Page_Load(object sender, EventArgs e)

    ClientScript.RegisterClientScriptInclude(this.GetType(), "live", "http://js.live.net/4.0/loader.js");

Firebug 不再显示任何错误,就我而言,身份验证窗口正在按需要打开。

希望对你有帮助!

编辑

如前所述,下面是我用来避免此问题的整个代码:

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wl="http://apis.live.net/js/2010">
<head>
    <title>SignIn Example</title>
    <script type="text/javascript">
        function appLoaded(appLoadedEventArgs) 
        
        function signInCallback(signInCompletedEventArgs) 
            if (signInCompletedEventArgs.get_resultCode() === Microsoft.Live.AsyncResultCode.success)
            
                alert('Sign-in successful.');
            
            else
            
                alert('Sign-in failed.');
            
        
    </script>
</head>
<body>
    <form runat="server" id="form1">

    <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release"></asp:ScriptManager>

    <wl:app channel-url="http://labs.asteria.com.br/wlm/Channel.html" 
        callback-url="http://labs.asteria.com.br/wlm/Callback.aspx?wl_session_id=<%= Session.SessionID %>"
        client-id="0000000044052209" 
        scope="WL_Profiles.View" 
        onload="appLoaded">
    </wl:app>
    <wl:signin 
        id="signInControl" 
        signedintext="Signed in. Click to sign out." 
        signedouttext="Click to sign in."
        onsignin="signInCallback" />
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page

    protected void Page_Load(object sender, EventArgs e)
    
        ClientScript.RegisterClientScriptInclude(this.GetType(), "live", "http://js.live.net/4.0/loader.js");
    

Web.config

<?xml version="1.0"?>
<configuration>
<appSettings>
    <add key="wl_wrap_client_secret" value="[YOUR SECRET KEY]"/>
    <add key="wl_wrap_client_id" value="0000000044052209"/>
    <add key="wl_wrap_client_callback" value="http://labs.asteria.com.br/wlm/Callback.aspx"/>
</appSettings>

<connectionStrings/>
<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.0"></compilation>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
</configuration>

要查看它的运行情况,您可以访问http://labs.asteria.com.br/wlm。此时同意 URL (https://consent.live.com/AccessToken.aspx) 似乎没有响应。

【讨论】:

我目前没有参与任何涉及此问题的项目,因此如果有人可以验证此答案,我很乐意将其标记为已回答。 即使未经证实,也将赏金作为最佳答案授予。如果不是太长,会很高兴看到所有代码。 当然,我稍后会发布它,连同一个工作示例。 将其标记为已回答,因为我无法确认答案。 @Tuco 和 @Mark Schultheiss,如果有任何问题,请发表评论。

以上是关于在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误的主要内容,如果未能解决你的问题,请参考以下文章

PSEXEC 通过命令提示符成功运行,但在 ASP .Net/C# 中失败

如何在目标c中的asp.net web api方法中使用POST方法?

如何在 Active Directory 中获取用户的组? (c#, asp.net)

使用c#asp.net从excel文件中获取数据

大型查询如何在 C#/ASP.NET MVC 4 部分中返回结果

从 ftp 在 gridview 上显示数据 查看更多:C#ASP.NET