Question

J'ai un problème ici.

J'ai un site Web ASP.net hébergeant une application silverlight 2. J'aimerais que le site communique avec l'application Silverlight, et je le fais via des requêtes http. Incidemment, si quelqu'un connaît une meilleure solution, merci de me le dire.

L’écouteur http suivant a été configuré sur mon serveur. Je l'ai copié quelque part sur un site de tutoriel, car il s'agit principalement d'expérimentation en ce moment:

      HttpListener listener = new HttpListener (  );
      listener.Prefixes.Add("http://localhost:4531/MyApp/");  
      listener.Start(  );                                         

      // Wait for a client request:
      HttpListenerContext context = listener.GetContext(  );

      // Respond to the request:
      string msg = "You asked for: " + context.Request.RawUrl;
      context.Response.ContentLength64 = Encoding.UTF8.GetByteCount (msg);
      context.Response.StatusCode = (int) HttpStatusCode.OK;

      using (Stream s = context.Response.OutputStream)
      using (StreamWriter writer = new StreamWriter (s))
        writer.Write (msg);

      listener.Stop(  );

J'utilise le code suivant pour envoyer une demande:

 private void MyButton_Click(object sender, RoutedEventArgs e)
        {
            Button b = sender as Button;
            b.Content = "Hello World";

            Uri serviceUri = new Uri("http://localhost:4531/MyApp/");
            WebClient downloader = new WebClient();
            downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TestDownloadStoriesCompleted);
            downloader.DownloadStringAsync(serviceUri);

        }
        void TestDownloadStoriesCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                TextBox1.Text = e.Result;
            }
        }

Mon problème est que je peux me connecter au serveur Web à partir d'une application console en utilisant à peu près le même code (je l'ai testé en définissant un point d'arrêt dans le code). Toutefois, rien ne se produit lorsque je clique sur le bouton dans Silverlight. (J'ai ajouté le "Hello World" pour vérifier que je connecte bien le délégué au bouton.)

J'ai lu que Silverlight avait besoin de politiques pour se connecter via le client Web, mais cela ne devrait pas être le cas si j'utilise le même serveur et le même domaine pour le serveur et l'application Silverlight!

Merci pour toutes vos réponses!

EDIT: je reçois cette exception:

System.Security.SecurityException --- > System.Security.SecurityException: erreur de sécurité.

En outre, en fonction de ce que je suis lisant apparemment être le site d'origine, l'URI de déploiement du xap et l'URI de la demande doivent également appartenir au même port.

Cependant, lorsque je configure les propriétés du serveur pour qu'il soit hébergé sur un port spécifique et que l'écouteur écoute ce même port, le message suivant s'affiche: Le processus ne peut pas accéder au fichier car il est utilisé. par un autre processus. Je suppose que c’est parce que l’auditeur http ne peut pas écouter le même port que celui qui l’héberge: | Mais alors comment puis-je faire en sorte que Silverlight exécute les demandes d’hôte du client Web d’origine?

Était-ce utile?

La solution

Puisqu'il ne s'agit que d'un test, ajoutez un "else TextBox1.Text = e.Error.ToString ();" dans votre gestionnaire TestDownloadStoriesCompleted pour voir quelle erreur vous obtenez.

EDIT:

Vous ne pouvez pas héberger à la fois l'application asp.net et votre auditeur sur le même port. Vous pouvez résoudre ce problème en utilisant un port différent et en servant un clientaccesspolicy.xml à partir de votre httplistener.

Cependant, je pense qu'il serait plus logique que vous examiniez les services Web WCF (vous ajoutez le code svc à votre application asp.net). Voici un échantillon .

Autres conseils

vous pouvez utiliser des outils tels que http://www.fiddler2.com/fiddler2/ pour voir réellement ce qui se passe pendant la demande ... Cela peut vous aider à poursuivre le débogage ...

J'utilise maintenant des gestionnaires HTTP pour la communication. Il semble qu'ils fonctionneront assez bien pour mon objectif, bien que je veuille toujours essayer un peu de la WCF.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top