Pregunta

Tengo un problema aquí.

Tengo un sitio web ASP.net que aloja una aplicación Silverlight 2. Me gustaría que el sitio se comunicara de aquí para allá desde la aplicación Silverlight, y lo estoy haciendo a través de solicitudes http. Por cierto, si alguien conoce una mejor manera, por favor dígame.

Mi servidor tiene configurada la siguiente escucha HTTP. Copié esto de un sitio de tutoría en algún lugar, ya que es principalmente experimentación en este momento:

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

Estoy usando el siguiente código para enviar una solicitud:

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

Mi problema es que puedo conectarme al servidor web desde una aplicación de consola usando prácticamente el mismo código (lo probé estableciendo un punto de interrupción en el código), sin embargo, no sucede nada cuando hago clic en el botón en Silverlight. (He agregado el "Hola Mundo" para probar que realmente estoy conectando al delegado al botón).

¡He leído que Silverlight necesita políticas para conectarse a través del cliente web, pero no debería ser el caso si estoy usando el mismo servidor y el mismo dominio tanto para el servidor como para la aplicación Silverlight!

¡Gracias por todas sus respuestas!

EDITAR: Estoy recibiendo esta excepción:

System.Security.SecurityException --- > System.Security.SecurityException: error de seguridad.

Además, según lo que soy lectura aparentemente como sitio de origen, el URI de implementación del xap y el URI de solicitud también deben ser del mismo puerto.

Sin embargo, cuando configuro las propiedades para que el servidor esté alojado en un puerto específico, y configuro que el oyente escuche ese mismo puerto, falla con el mensaje de que el proceso no puede acceder al archivo porque se está utilizando por otro proceso Supongo que es porque el oyente http no puede escuchar el mismo puerto que se utiliza para alojarlo: | Pero, ¿cómo puedo hacer que Silverlight realice solicitudes de cliente web de host de origen?

¿Fue útil?

Solución

Dado que esto es solo una prueba, agregue un " más TextBox1.Text = e.Error.ToString (); " en su controlador TestDownloadStoriesCompleted para ver qué error obtiene.

EDITAR:

No puede alojar tanto la aplicación asp.net como su oyente en el mismo puerto; puede solucionar esto utilizando un puerto diferente y sirviendo un clientaccesspolicy.xml desde su httplistener.

Sin embargo, creo que tendría más sentido que eche un vistazo a los servicios web de WCF (agrega el svc a su aplicación asp.net). Aquí hay un muestra .

Otros consejos

puede usar herramientas como http://www.fiddler2.com/fiddler2/ para ver realmente lo que sucede durante la solicitud ... Esto puede dar alguna ayuda para una mayor depuración ...

Ahora estoy usando controladores HTTP para la comunicación. Parece que funcionarán lo suficientemente bien para mi propósito, aunque todavía quiero probar algunos WCF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top