Подключитесь к Google Analytics из Silverlight - PullRequest
1 голос
/ 15 марта 2011

Я создал простое приложение SL 4 для подключения к Google Analytics, но получаю следующее исключение:

{System.Security.SecurityException: Security error.
   at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at GoogleAnalytics.Silverlight.MainPage.<>c__DisplayClass4.<GetResponseCallback>b__3()}

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

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

private byte[] _data;

public MainPage()
{
    InitializeComponent();
    this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    string requestData = "Email=email@gmail.com" +
                         "&Passwd=password" +
                         "&source=Test-App" +
                         "&accountType=GOOGLE" +
                         "&service=analytics";

    _data = Encoding.UTF8.GetBytes(requestData);

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("https://www.google.com/accounts/ClientLogin", UriKind.Absolute));
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = _data.Length;

    request.BeginGetRequestStream(GetRequestStreamCallback, request);
}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
    this.Dispatcher.BeginInvoke(() =>
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
            Stream stream = request.EndGetRequestStream(asynchronousResult);
            stream.Write(_data, 0, _data.Length);
            stream.Close();

            request.BeginGetResponse(GetResponseCallback, request);
        }
        catch (Exception e)
        {
            textBlock.Text = e.ToString();
        }
    });
}

private void GetResponseCallback(IAsyncResult asynchronousResult)
{
    this.Dispatcher.BeginInvoke(() =>
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

            Stream stream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(stream, Encoding.UTF8);

            textBlock.Text = streamReader.ReadToEnd().Split(new string[] { "Auth=" }, StringSplitOptions.None)[1];

            streamReader.Close();
            response.Close();
        }
        catch (Exception e)
        {
            textBlock.Text = e.ToString();
        }
    });
}

Обновление: исправлена ​​опечатка.

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Silverlight не может подключиться к службам GA, мне нужно либо использовать службу, либо JavaScript, а затем передать данные в Silverlight.

0 голосов
/ 15 марта 2011

Просто несколько советов, я еще не тестировал ваш код, но они могут помочь.

  1. Используйте WebClient для веб-запросов, это оченьменьше и чище кода ... Вы найдете примеров на MSDN <- эта ссылка также содержит почти все интересные темы по запросам и безопасности Silverlight Web / http / https - это необходимо прочитать в вашем сценарии </p>

  2. Проблемы могут возникнуть, если вы проводите тестирование в неправильной среде, например при тестировании объекта Silverlight по локальному URL-адресу файла (веб-URL начинается с file: /// ...).Создайте веб-проект в своем сервисе, настройте проект Silverlight для запуска в этом созданном веб-проекте под тестовым веб-сервером или локальным IIS

Я знаю, никаких примеров кода просто ссылки илиСоветы, они могут вам помочь.

С наилучшими пожеланиями

ОБНОВЛЕНИЕ

Что именно вы пытаетесь сделать?Если вы хотите отслеживать, я видел несколько готовых решений для Silverlight, например Silverlight Analytics или Отслеживание Silverlight .Вот еще одно известное решение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...