c# - 从Silverlight连接到Google Analytics(分析)

标签 c# silverlight silverlight-4.0 google-analytics

我创建了一个简单的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中则不能。

UI有一个textblock控件,下面是代码:

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();
        }
    });
}


更新:修正了一个错字。

谢谢

最佳答案

只是一些技巧,我尚未测试您的代码,但它们可能会有所帮助。


WebClient用于Web请求,它的代码要简洁得多...您将发现examples on MSDN <-此链接还包含有关Silverlight Web / http / https请求和安全性的几乎所有有趣的主题-您必须阅读情景
如果您在错误的环境中进行测试(例如从本地文件url(以file:/// ...开头的Web Url)测试Silverlight对象),则可能会出现问题。在您的服务中创建一个Web项目,将Silverlight项目配置为在Test Web Server或本地IIS下在该创建的Web项目中运行


我知道,没有代码示例只是链接或提示,它们可能会对您有所帮助。

最好的祝福

更新

您到底想做什么?如果您想跟踪,我已经看到了一些针对Silverlight的现成解决方案,例如Silverlight AnalyticsTracking Silverlight。这是另一个known solution

关于c# - 从Silverlight连接到Google Analytics(分析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315400/

相关文章:

c# - 事件采购资源

c# - WP7 中 IsolatedStorageSettings 中的参数异常

mvvm - 使用 Caliburn 将 SL4 TreeView 绑定(bind)到 IGrouping

silverlight - 我可以更改 ItemTemplate 中 DataTemplate 的 VisualState 吗?

c#-4.0 - 计算 bing map 中两点之间的距离

银光 4 : How to trigger an Animation when TextBlock’s Text is changed during a DataBinding?

javascript - 使用 ASP.NET 在服务器上将 HTML 5 Canvas 保存为图像

c# - 如何手动发送键盘扫描码?

c# - Thread.Abort() 在工作线程调用 Dispatcher.Invoke() 时创建死锁

wpf - 数据模板中的数据绑定(bind)不起作用