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

我在实施现有Sitefinity网站内部的新的Messenger Connectfunction时出现问题,无法使用实时IDlogin客户端。

也就是说,当我使用下面的代码来实现客户端function时:

<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:types'Sys._Application'的对象不能转换为'Sys.IDisposable'types。 参数名称:对象

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

Sys.Application._doInitialize不是一个函数

(在MicrosoftAjaxBase.js第1行)

Sys.InvalidOperationException:脚本“MicrosoftAjaxGlobalization.js”已被多次引用。 如果显式引用Microsoft AJAX脚本,请将ScriptManager的MicrosoftAjaxMode属性设置为Explicit。

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

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

编辑 :似乎错误不一定以此顺序触发。 例如,刷新页面似乎会改变这些错误和/或引入其他错误,例如,在ScriptResource.axd?...Sys.ParameterCountException

嘿,我在这里尝试了一些组合,而那个工作的是:

1)将ScriptManager的ScriptMode属性设置为Release ;

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

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

Firebug不再显示任何错误,在我的情况下,authentication窗口是根据需要打开的。

希望能帮助到你!

编辑

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

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)似乎目前没有回应。;