Ошибка Javascript при использовании клиентской библиотеки Messenger Connect в ASP.NET

У меня возникла проблема с реализацией новой функции Messenger Connect на существующем сайте Sitefinity, позволяющей клиентам входить в систему с помощью 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 не является функцией

(в строке 1 MicrosoftAjaxBase.js)

Sys.InvalidOperationException: на сценарий «MicrosoftAjaxGlobalization.js» ссылались несколько раз. При явной ссылке на сценарии Microsoft AJAX задайте для свойства MicrosoftAjaxMode ScriptManager значение Explicit.

(в ScriptResource.axd?d=.... строка 984)

Ошибки возникают только тогда, когда я включаю скрипт loader.js с js.live.net.

EDIT: кажется, ошибки не обязательно возникают в этом порядке. Обновление страницы, кажется, перемешивает эти ошибки и/или добавляет другие, например, Sys.ParameterCountException в ScriptResource.axd?... в строке 1842.


person Klemen Slavič    schedule 18.11.2010    source источник
comment
У меня тоже была эта ошибка, и пока не удалось найти решение. Кажется, что Messenger Connect использует свою собственную версию функциональности загрузчика AJAX и не очень хорошо работает с существующей версией, если вы используете ее для других целей (например, асинхронная загрузка всего остального).   -  person Bill Forney    schedule 14.03.2011
comment
Посмотрите, помогает ли это также независимо от исходного виновника, чтобы узнать, помогает ли это: stackoverflow.com/questions/19103128/   -  person atconway    schedule 03.10.2013


Ответы (1)


Эй, я попробовал несколько комбинаций здесь, и одна из них сработала:

1) Установите для свойства ScriptMode ScriptManager значение Release;

2) Загрузите библиотеку MSN в событии CodeBehind Page_Load, используя класс 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) в настоящее время не отвечает.

person Tuco    schedule 25.05.2011
comment
В настоящее время я не работаю над каким-либо проектом, связанным с этим, поэтому, если кто-нибудь может проверить этот ответ, я с радостью отмечу его как ответ. - person Klemen Slavič; 26.05.2011
comment
Присуждение награды как лучший ответ, даже если он не подтвержден. Было бы неплохо увидеть весь код, если он не слишком длинный. - person Mark Schultheiss; 01.06.2011
comment
Обязательно опубликую позже, вместе с рабочим образцом. - person Tuco; 01.06.2011
comment
Пометка как ответ, так как я не могу подтвердить ответ. @Tuco & @Mark Schultheiss, прокомментируйте, если что-то сломается. - person Klemen Slavič; 03.06.2011