Frage

Ich habe ein Problem hier.

Ich habe eine ASP.net Website-Hosting eine Silverlight 2-Anwendung kommt. Ich würde die Seite gefällt hin und her von der Silverlight-Anwendung zu kommunizieren, und ich diese Anfragen über HTTP zu tun. Übrigens, wenn jemand einen besseren Weg kennt, kann man mich erzählen.

Mein Server bekam die folgenden http-Listener einrichten. Ich kopierte diese aus einer Tutorial-Website irgendwo, da es zur Zeit vor allem Experimentieren ist:

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

Ich verwende den folgenden Code, um eine Anfrage zu senden:

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

Mein Problem ist, dass ich auf den Webserver von einer Konsolenanwendung verbinden kann so ziemlich den gleichen Code verwenden (Getestet habe ich es durch einen Haltepunkt in der Code-Einstellung), passiert jedoch nichts, wenn ich auf den Button in Silver klicken. (Ich habe die „Hallo Welt“ hinzugefügt, um zu testen, dass ich in der Tat am Anschluss der Delegierten auf die Taste.)

Ich habe gelesen, dass Silverlight-Richtlinien über webclient verbinden muss, aber es soll nicht der Fall sein, wenn ich den gleichen Server bin mit und der gleichen Domäne sowohl für den Server und die Silverlight-Anwendung!

Vielen Dank für Ihre Antworten!

EDIT: Ich bin recieving diese Ausnahme:

System.Security.SecurityException ---> System.Security.SecurityException. Sicherheitsfehler

Auch auf das, was ich bin Lesen anscheinend Website-of-Ursprungs sein, den Einsatz URI des xap und die Anforderungs-URI muss auch aus dem gleichen Port sein.

Allerdings, wenn ich die Eigenschaften festgelegt für den Server auf einem bestimmten Port gehostet werden, und ich den Hörer auf den gleich Port zu hören, schlägt es mit der Meldung, dass der Prozess nicht auf die Datei zugreifen, da sie benutzt wird von einem anderen Prozess. Ich nehme an, es liegt daran, dass der HTTP-Zuhörer nicht auf den gleichen Port hören wird verwendet, um es zu hosten: | Aber wie kann ich dann Silverlight ausführen Host Ursprung webclient Anfragen machen?

War es hilfreich?

Lösung

Da dies nur ein Test ein hinzufügen "else TextBox1.Text = e.Error.ToString ();" in Ihrem TestDownloadStoriesCompleted Handler zu sehen, welche Fehler Sie erhalten.

EDIT:

Sie nicht sowohl die asp.net app und Ihre Zuhörer auf dem gleichen Port hosten kann -. Sie können dieses Problem beheben, indem Sie einen anderen Port und einen clientaccesspolicy.xml von Ihrem Httplistener dienen

Aber ich denke, es würde mehr Sinn macht für Sie einen Blick auf WCF Web-Dienste in Anspruch nehmen (Sie können die SVC zu Ihrem asp.net App hinzufügen). Hier ist ein Probe .

Andere Tipps

Sie können Tools wie http://www.fiddler2.com/fiddler2/ um tatsächlich zu sehen, was während der Anforderung wird auf .... Dies kann etwas Hilfe für die weitere Fehlersuche geben ...

Ich bin jetzt mit HTTP-Handler für die Kommunikation. Es scheint, dass sie fein genug für meine Zwecke funktioniert, obwohl ich möchte noch einige WCF ausprobieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top