2010-02-14 7 views
1

Je suis en train d'écrire une petite application Silverlight juste pour essayer Silverlight. Mon idée est de faire une petite application qui vérifie si les sites Web sont en ligne. Il fonctionne par l'utilisateur en entrant une URL et mon application vérifie le temps de disponibilité toutes les 5 minutes.appeler des sites Web externes de Silverlight

Mais quand je fais un webrequest, je reçois l'exception de sécurité ci-dessous. Lecture http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx il semble indiquer que silverlight ne permet pas la connexion crossdomain. Donc, n'y a-t-il aucun moyen de faire fonctionner mon idée dans Silverlight?

code Exemple:

 WebRequest testHTTP = null; 
      try 
      { 
       testHTTP = WebRequest.Create(serverToCheck); 
      } 
      catch (UriFormatException ufe) 
      { 
       try 
       { 
        testHTTP = WebRequest.Create("http://" + serverToCheck); 
       } 
       catch (UriFormatException ufe1) 
       { 
        MessageBox.Show("Invalid server address"); 

       } 
      } 
      if (testHTTP != null) 
      { 
       testHTTP.BeginGetResponse(new AsyncCallback(doCheck), testHTTP); 

       } 

    void doCheck(IAsyncResult a) 
    { 
     try 
     { 
      HttpWebRequest req = (HttpWebRequest)a.AsyncState; 
      HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(a); 

      Dispatcher.BeginInvoke(() => HTTPStatus.Content = "OK"); 

     } 
     catch (Exception ex) 
     { 
    //handle exception 
     } 

    } 

Exception: { System.Security.SecurityException ---> System.Security.SecurityException: erreur de sécurité. à System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) à System.Net.Browser.BrowserHttpWebRequest. <> c__DisplayClass5.b__4 (Object sendState) sur System.Net.Browser.AsyncHelper. <> c__DisplayClass2.b__0 (Object sendState) --- Fin de trace de pile d'exception interne --- à System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, l'état de l'objet) à System.Net.Browser.BrowserHttpWebRequest. EndGetResponse (IAsyncResult asyncResult) à monitor.Home.doCheck (IAsyncResult a)}

Répondre

3

Vous ne pouvez pas remplacer la stratégie de domaine croisé du serveur dans Silverlight 3. Dans Silverlight 4, vous pouvez avec une application «hors navigateur» de confiance. Votre meilleur pari est de créer un service qui fonctionne sur le même domaine que celui qui héberge l'application Silverlight et de faire les vérifications.

0

vous pouvez faire une page côté serveur ASP.Net qui se connecte à un site Web et vous indique si c'est.
Comme il serait hébergé sur le même domaine que votre application Silverlight, il fonctionnerait correctement. (ASP.Net n'a pas de telles restrictions)

Notez qu'il vérifie ensuite si le serveur peut se connecter au site Web plutôt qu'au client.

0

Les sites auxquels vous tentez d'accéder nécessitent qu'un fichier de stratégie inter-domaines soit en place pour autoriser l'accès. Les sites d'arbitrage ne sont pas susceptibles d'avoir ces derniers alors ce que vous essayez de faire est bloqué.

0

Je suppose que l'URI cible a besoin d'un fichier clientaccesspolicy.xml ou d'un fichier crossdomain.xml dans la racine. La solution pourrait être de faire un service WCF situé sur votre serveur qui gère la demande.

Questions connexes