2010-11-18 17 views
37

Tengo un problema al implementar la nueva funcionalidad de Messenger Connect dentro de un sitio Sitefinity existente para habilitar los inicios de sesión del cliente usando Live ID.Error de Javascript al usar la biblioteca del lado del cliente de Messenger Connect en ASP.NET

A saber, cuando estoy usando el siguiente código para implementar la funcionalidad del lado del cliente:

<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> 

... tengo tres errores en Firebug que no acabo de identificar correctamente:

Sys.ArgumentTypeException: el objeto de tipo 'Sys._Application' no puede ser convertido a tipo 'Sys.IDisposable'. nombre Parámetro: objeto

Sys.Application._doInitialize no es una función

(en (en ScriptResource.axd d = .... línea 4993?) MicrosoftAjaxBase.js línea 1)

Sys.InvalidOperationException: The sc ript 'MicrosoftAjaxGlobalization.js' ha sido referenciado varias veces. Si hace referencia explícitamente a los scripts de Microsoft AJAX , establezca la propiedad MicrosoftAjaxMode del ScriptManager en Explícito.

(en ScriptResource.axd? D = .... line 984)

Los errores sólo se activan cuando se incluyo el guión loader.js de js.live.net.

EDIT: Parece que los errores no se desencadenan necesariamente en ese orden. La actualización de la página parece mezclar esos errores y/o introducir otros, como Sys.ParameterCountException en ScriptResource.axd?... en la línea 1842, por ejemplo.

+0

Tuve este error y no he tenido suerte para encontrar una solución. Parece que Messenger Connect usa su propia versión de la funcionalidad del cargador AJAX y no funciona bien con la versión existente si la usas para otras cosas (como cargar todo lo demás de manera sincronizada). –

+0

Vea si esto ayuda también independientemente del culpable de origen para ver si ayuda: http://stackoverflow.com/questions/19103128/javascript-runtime-error-for-microsoft-ajax-scripts – atconway

Respuesta

3

Hey, he intentado algunas combinaciones aquí, y el que trabajó fue:

1) Establecer la propiedad ScriptMode del ScriptManager a lanzamiento;

2) Cargar la biblioteca de MSN en el evento Page_Load CodeBehind, utilizando la clase ClientScript:

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

Firebug no se muestra ningún error más, y en mi caso, la ventana de autenticación está abriendo según se desee.

Espero que ayude!

EDITAR

Como se dijo antes, aquí sigue todo el código que utilizo para evitar este problema:

predeterminado.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> 

para verla en funcionamiento, puede acceder http://labs.asteria.com.br/wlm. Parece que la URL de consentimiento (https://consent.live.com/AccessToken.aspx) no responde en este momento.

+0

No estoy trabajando actualmente en cualquier proyecto que involucre esto, de modo que si alguien puede verificar esta respuesta, con mucho gusto lo marcaré como respondí. –

+0

Quizás Bill Forney pueda confirmar ... –

+0

Otorgar la recompensa como la mejor respuesta, incluso si no está confirmada. Sería bueno ver todo el código si no es demasiado largo. –

Cuestiones relacionadas