none
Silverlight (4) SecurityException RRS feed

  • Frage

  • Hallo! Ich habe ein Silverligt Project (mit Asp-Seite) erstellt und versuche mit Hilfe von einem WebClient eine Datei aus dem internet zu laden:
    WebClient webClient = new WebClient();
    webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
    webClient.OpenReadAsync(new Uri(@"http://www.seite.com/images/bild.jpg", UriKind.Absolute), null);
         
    

    Ich bekomme aber eine Exception:
    base	{System.Security.SecurityException: Sicherheitsfehler
      bei System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
      bei System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState)
      bei System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)}	System.SystemException {System.Security.SecurityException}
    
    
    Fehlt mir eiine crossdomain.xml? WIe muss diese aussehen und wo muss sie in das Projekt eingebunden werden?
    Danke für die Hilfe!
     
     
     
    Samstag, 20. August 2011 16:17

Antworten

  • Hallo Dulc.,

    also die beiden Policy-XML-Dateien (clientaccesspolicy.xml, crossdomain.xml) müssten auf die Seite von "http://www.seite.com" und nicht auf die hostende (ASP.NET) Seite. Das ist aber im Normalfall nicht für eine allgemeine Webseite vorhanden.

    Insofern bleiben normal folgende Haupt-Möglichkeiten:
    1. in den SL-Projekt-Eigenschaften "Ausführen außer des Browsers aktivieren" anhaken und in den "Out of Browser"-Einstellungen der SL-App "Bei Ausführung außerhalb des Browsers höhere Vertrauensstellung fordern" aktivieren.
    2. Einen Dienst im ASP.NET hostenden Projekt schreiben, der den Download übernimmt und ihn per Methode (die dann wiederum den WebClient nutzt) aufrufen.
    3. Speichern der entsprechenden clientaccesspolicy.xml / crossdomain.xml auf der Webseite: "http://www.seite.com" (nicht die ASP.NET Webserver-Hosting-Site)
    (Silverlight-Fragen werden normal in diesem Forum gestellt)
    ___________________

    Beispiel-Code:
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media.Imaging;
    
    namespace SilverOpenReadDemo
    {
     public partial class MainPage : UserControl
     {
      Button btnBildLaden = new Button { Content = "Bild laden", Height = 23, Width = 100 };
    
      public MainPage()
      {
       InitializeComponent();
       LayoutRoot.Children.Add(btnBildLaden);
       btnBildLaden.Click += btnBildLaden_Click;
      }
    
      private void btnBildLaden_Click(object sender, RoutedEventArgs e)
      {
       WebClient webClient = new WebClient();
       webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
       webClient.OpenReadAsync(new Uri(@"http://dzaebel.net/Bilder/Frank_k.jpg", UriKind.Absolute), null);
      }
    
      void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
      {
       if (e.Cancelled) return;
       if (e.Error != null) { FehlerAnzeigen(e.Error.ToString()); return; }
       BitmapImage bitmap = new BitmapImage();
       bitmap.SetSource(e.Result);
       Content = new Image() { Source = bitmap };
      }
    
      private void FehlerAnzeigen(string info)
      {
       TextBlock fehlerText = new TextBlock
       {
        Text = info, TextWrapping = TextWrapping.Wrap,
        Margin = new Thickness(10)
       };
       Content = fehlerText;
      }
     }
    }
    
    __________________
    [Verfügbarmachen eines Diensts über Domänengrenzen hinweg]
    [Silverlight HTTP Networking Stack – Part 2 (Cross Domain Communication Overview) | scorbs]
    [Zugriffsbeschränkungen für die Netzwerksicherheit in Silverlight]
    [Herunterladen von Inhalten bei Bedarf]
    [URL-Zugriffsbeschränkungen in Silverlight]
    [ASP.net - Silverlight Cross-Domain-Policy Dateien]
    ciao Frank
    Samstag, 20. August 2011 19:32
  • Hallo Dulc,

    • Du schriebst: "Bezieht sich der Punkt 2 "Einen Dienst im ASP.NET hostenden Projekt schreiben, der den Download übernimmt und ihn per Methode (die dann wiederum den WebClient nutzt) aufrufen." ebenfalls auf die Site "seite.com"? D.h. dort muss der Download "angeboten" werden? Oder wie ist das zu verstehen?"

    der Download wird von Deinem Dienst (etwa im ASP.Net Projekt) "angeboten" über die Dienst-Methode. Du übergibst der Dienst-Methode dann zum Beispiel einfach die (quasi beliebige) URL, dann kannst Du (von Silverlight aus) über den Dienst das Bild von "...Seite.com" downloaden, das ist dann quasi ein Download-Proxy.
    Ein Beispiel bietet folgendes Projekt:

    [File Upload from Silverlight using WCF In Server Location - C#, ASP.Net, VB.Net]
    http://www.dotnetspark.com/kb/1510-file-upload-from-silverlight-using-wcf-server.aspx
    (der Upload sollte dann halt als Download um-implementiert werden - ist ja eher einfach)

    Bitte beachte, dass "dann" natürlich die crossdomain.xml und clientaccesspolicy.xml im Stamm des ASP.NET-Dienst (-Projektes) sein müssen, da Silverlight dann diese (ASP.NET-Dienst-Stamm-) URL anfragt.

    Deine Frage ist sehr wichtig, denn viele haben diesbezügliche Fragen schon gestellt und sie werden im Netz z.T. nur unzureichend beantwortet.
    Ich denke ein Moderator wird diese Frage demnächst ins Silverlight-Forum verschieben, also wundere Dich da nicht, dort versuchen sie ja Silverlight-Benutzer später auch zu finden.


    ciao Frank




    • Als Antwort markiert DulcineaS Sonntag, 21. August 2011 18:18
    Sonntag, 21. August 2011 16:49

Alle Antworten

  • Hallo Dulc.,

    also die beiden Policy-XML-Dateien (clientaccesspolicy.xml, crossdomain.xml) müssten auf die Seite von "http://www.seite.com" und nicht auf die hostende (ASP.NET) Seite. Das ist aber im Normalfall nicht für eine allgemeine Webseite vorhanden.

    Insofern bleiben normal folgende Haupt-Möglichkeiten:
    1. in den SL-Projekt-Eigenschaften "Ausführen außer des Browsers aktivieren" anhaken und in den "Out of Browser"-Einstellungen der SL-App "Bei Ausführung außerhalb des Browsers höhere Vertrauensstellung fordern" aktivieren.
    2. Einen Dienst im ASP.NET hostenden Projekt schreiben, der den Download übernimmt und ihn per Methode (die dann wiederum den WebClient nutzt) aufrufen.
    3. Speichern der entsprechenden clientaccesspolicy.xml / crossdomain.xml auf der Webseite: "http://www.seite.com" (nicht die ASP.NET Webserver-Hosting-Site)
    (Silverlight-Fragen werden normal in diesem Forum gestellt)
    ___________________

    Beispiel-Code:
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media.Imaging;
    
    namespace SilverOpenReadDemo
    {
     public partial class MainPage : UserControl
     {
      Button btnBildLaden = new Button { Content = "Bild laden", Height = 23, Width = 100 };
    
      public MainPage()
      {
       InitializeComponent();
       LayoutRoot.Children.Add(btnBildLaden);
       btnBildLaden.Click += btnBildLaden_Click;
      }
    
      private void btnBildLaden_Click(object sender, RoutedEventArgs e)
      {
       WebClient webClient = new WebClient();
       webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
       webClient.OpenReadAsync(new Uri(@"http://dzaebel.net/Bilder/Frank_k.jpg", UriKind.Absolute), null);
      }
    
      void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
      {
       if (e.Cancelled) return;
       if (e.Error != null) { FehlerAnzeigen(e.Error.ToString()); return; }
       BitmapImage bitmap = new BitmapImage();
       bitmap.SetSource(e.Result);
       Content = new Image() { Source = bitmap };
      }
    
      private void FehlerAnzeigen(string info)
      {
       TextBlock fehlerText = new TextBlock
       {
        Text = info, TextWrapping = TextWrapping.Wrap,
        Margin = new Thickness(10)
       };
       Content = fehlerText;
      }
     }
    }
    
    __________________
    [Verfügbarmachen eines Diensts über Domänengrenzen hinweg]
    [Silverlight HTTP Networking Stack – Part 2 (Cross Domain Communication Overview) | scorbs]
    [Zugriffsbeschränkungen für die Netzwerksicherheit in Silverlight]
    [Herunterladen von Inhalten bei Bedarf]
    [URL-Zugriffsbeschränkungen in Silverlight]
    [ASP.net - Silverlight Cross-Domain-Policy Dateien]
    ciao Frank
    Samstag, 20. August 2011 19:32
  • Hallo! Habe wohl die Seiten verwechselt.. Jetzt ist es mir klar.
    Bezieht sich der Punkt 2 "Einen Dienst im ASP.NET hostenden Projekt schreiben, der den Download übernimmt und ihn per Methode (die dann wiederum den WebClient nutzt) aufrufen." ebenfalls auf die Site "seite.com"? D.h. dort muss der Download "engaboten" werden? Oder wie ist das zu verstehen?

    Danke für die Antwort!

    Sonntag, 21. August 2011 15:10
  • Hallo Dulc,

    • Du schriebst: "Bezieht sich der Punkt 2 "Einen Dienst im ASP.NET hostenden Projekt schreiben, der den Download übernimmt und ihn per Methode (die dann wiederum den WebClient nutzt) aufrufen." ebenfalls auf die Site "seite.com"? D.h. dort muss der Download "angeboten" werden? Oder wie ist das zu verstehen?"

    der Download wird von Deinem Dienst (etwa im ASP.Net Projekt) "angeboten" über die Dienst-Methode. Du übergibst der Dienst-Methode dann zum Beispiel einfach die (quasi beliebige) URL, dann kannst Du (von Silverlight aus) über den Dienst das Bild von "...Seite.com" downloaden, das ist dann quasi ein Download-Proxy.
    Ein Beispiel bietet folgendes Projekt:

    [File Upload from Silverlight using WCF In Server Location - C#, ASP.Net, VB.Net]
    http://www.dotnetspark.com/kb/1510-file-upload-from-silverlight-using-wcf-server.aspx
    (der Upload sollte dann halt als Download um-implementiert werden - ist ja eher einfach)

    Bitte beachte, dass "dann" natürlich die crossdomain.xml und clientaccesspolicy.xml im Stamm des ASP.NET-Dienst (-Projektes) sein müssen, da Silverlight dann diese (ASP.NET-Dienst-Stamm-) URL anfragt.

    Deine Frage ist sehr wichtig, denn viele haben diesbezügliche Fragen schon gestellt und sie werden im Netz z.T. nur unzureichend beantwortet.
    Ich denke ein Moderator wird diese Frage demnächst ins Silverlight-Forum verschieben, also wundere Dich da nicht, dort versuchen sie ja Silverlight-Benutzer später auch zu finden.


    ciao Frank




    • Als Antwort markiert DulcineaS Sonntag, 21. August 2011 18:18
    Sonntag, 21. August 2011 16:49