37 votes

Erreur javascript lors de l'utilisation de la bibliothèque côté client de Messenger Connect en ASP.NET

J'ai un problème avec l'implémentation de la nouvelle fonctionnalité Messenger Connect dans un site Sitefinity existant pour permettre aux clients de se connecter en utilisant des Live IDs.

À savoir, lorsque j'utilise le code suivant pour mettre en œuvre la fonctionnalité côté client :

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

... J'obtiens trois erreurs dans Firebug que je n'arrive pas à identifier correctement :

Sys.ArgumentTypeException : L'objet de type 'Sys._Application' ne peut pas être converti en type 'Sys.IDisposable'. Nom du paramètre : object

(dans ScriptResource.axd?d=.... ligne 4993)

Sys.Application._doInitialize n'est pas une fonction

(dans MicrosoftAjaxBase.js ligne 1)

Sys.InvalidOperationException : Le site script 'MicrosoftAjaxGlobalization.js' (en anglais) a été référencé plusieurs fois. Si référencez les scripts AJAX de Microsoft explicitement, définissez la propriété MicrosoftAjaxMode du ScriptManager sur Explicite.

(dans ScriptResource.axd?d=.... ligne 984)

Les erreurs ne sont déclenchées que lorsque j'inclus l'option loader.js script de js.live.net.

EDITAR : Il semble que les erreurs ne se déclenchent pas forcément dans cet ordre. Le fait de rafraîchir la page semble mélanger ces erreurs et/ou en introduire d'autres, telles qu'une Sys.ParameterCountException en ScriptResource.axd?... à la ligne 1842, par exemple.

3voto

Tuco Points 769

Hey, j'ai essayé quelques combinaisons ici, et celle qui a marché était :

1) Définissez la propriété ScriptMode du ScriptManager comme suit Communiqué de presse ;

2) Chargez la bibliothèque MSN dans l'événement CodeBehind Page_Load, en utilisant la classe ClientScript :

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

Firebug ne montre plus aucune erreur, et dans mon cas, la fenêtre d'authentification s'ouvre comme prévu.

J'espère que cela vous aidera !

EDITAR

Comme indiqué précédemment, voici le code complet que j'utilise pour éviter ce problème :

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>

Pour le voir fonctionner, vous pouvez accéder à http://labs.asteria.com.br/wlm . Il semble que l'URL du consentement (https://consent.live.com/AccessToken.aspx) ne réponde pas pour le moment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X