2009-03-14 6 views
0

Ich habe ein Problem hier.Silverlight's WebClient stellt keine Verbindung zu meinem Server her

Ich habe eine ASP.net-Website, die eine silverlight 2-Anwendung hostet. Ich möchte, dass die Seite von der Silverlight App aus hin und her kommuniziert, und ich tue dies über HTTP-Anfragen. Übrigens, wenn jemand einen besseren Weg kennt, bitte sag es mir.

Mein Server hat die folgende http Listener eingerichtet. Ich kopierte diese aus einer Tutorial-Website irgendwo, da es vor allem Experimente im 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(); 

ich den folgenden Code bin mit einer Anfrage 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 eine Verbindung herstellen kann zum Webserver von einer Konsolenanwendung, die fast den gleichen Code verwendet (ich habe es getestet, indem ich einen Haltepunkt im Code gesetzt habe), passiert jedoch nichts, wenn ich auf die Schaltfläche in Silverlight klicke. (Ich habe die „Hallo Welt“ hinzugefügt, um zu testen, dass ich in der Tat am Anschluss der Delegierten auf die Taste.)

ich gelesen habe, dass Silverlight-Richtlinien über webclient verbinden muss, aber es soll nicht der Fall sein, wenn Ich benutze den gleichen Server und die gleiche Domain für den Server und die Silverlight-Anwendung!

Vielen Dank für Ihre Antworten!

EDIT: Ich bin diese Ausnahme recieving:

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

Auch basierend auf dem, was ich bin reading offenbar als Ursprungsort, müssen die Bereitstellung URI des XAP und der Anfrage-URI auch vom gleichen Port sein.

Wenn ich jedoch die Eigenschaften für den Server an einem bestimmten Port gehostet festlegen, und ich den Listener auf den gleichen Port zu überwachen, schlägt es mit der Nachricht fehl, dass der Prozess nicht auf die Datei zugreifen kann, weil es ist verwendet von einem anderen Prozess. Ich gehe davon aus, dass der HTTP-Listener nicht auf den gleichen Port hören kann, der zum Hosten verwendet wird: | Aber wie kann ich dann Silverlight veranlassen, eine Vielzahl von ursprünglichen Webclient-Anfragen durchzuführen?

Antwort

1

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

EDIT:

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

Aber ich denke, es wäre sinnvoller für Sie, einen Blick auf WCF Web Services (Sie fügen die SVC zu Ihrer asp.net App). Hier ist ein sample.

+0

Danke, das habe ich getan. Ich werde meinen Beitrag bearbeiten. –

0

Ich verwende jetzt HTTP-Handler für die Kommunikation. Es scheint, dass sie gut genug für meinen Zweck funktionieren werden, obwohl ich immer noch etwas WCF ausprobieren möchte.

1

können Sie Tools wie http://www.fiddler2.com/fiddler2/ tatsächlich nachschauen, was während der Anforderung los ist .... Dies kann einige Hilfe für die weitere Fehlersuche geben ...

+0

Danke für die Empfehlung! –