2010-11-18 2 views
37

У меня возникла проблема с внедрением новой функции Messenger Connect внутри существующего сайта Sitefinity, чтобы включить учетные записи клиентов с использованием Live ID.Ошибка Javascript при использовании клиентской библиотеки Messenger Connect в ASP.NET

А именно, когда я использую следующий код для реализации функциональности на стороне клиента:

<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». Имя Параметр: Объект

Sys.Application._doInitialize не функция

(в (в ScriptResource.axd д = .... линия 4993?) MicrosoftAjaxBase.js строка 1)

Sys.InvalidOperationException: sc ript 'MicrosoftAjaxGlobalization.js' ссылается несколько раз. Если ссылается на сценарии Microsoft AJAX явно, установите для свойства ScriptManager значение MicrosoftAjaxMode значение Явно.

(в ScriptResource.axd? Д = .... линия 984)

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

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

+0

У меня тоже была эта ошибка, и пока не удалось найти решение. Похоже, что Messenger Connect использует свою собственную версию функции загрузчика AJAX и не играет хорошо с существующей версией, если вы используете ее для других вещей (например, для асинхронной загрузки всего остального). –

+0

Посмотрите, поможет ли это также независимо от виновника, чтобы узнать, помогает ли он: http://stackoverflow.com/questions/19103128/javascript-runtime-error-for-microsoft-ajax-scripts – atconway

ответ

3

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

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 это больше не показывает какую-либо ошибку, и в моем случае, окно аутентификации открывается по желанию.

Надеюсь, это поможет!

EDIT

Как сказал ранее, здесь следует весь код, я использую, чтобы избежать этой проблемы:

по умолчанию.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) не отвечает в это время.

+0

Я сейчас не работаю по любому проекту, связавшему это, поэтому, если кто-нибудь сможет проверить этот ответ, я с радостью помету его, как ответ. –

+0

Возможно, Билл Форни сможет подтвердить ... –

+0

Награждение щедростью как лучший ответ, даже если он неподтвержден. Было бы неплохо увидеть весь код, если не слишком долго. –

Смежные вопросы