Pregunta

Estoy tratando de armar una solución a un problema. Básicamente estoy usando Silverlight 4 con C # 4.0 para acceder al mundo de Warcraft arsenal. Si alguien ha hecho esto -. Por favor, oh por favor provea el funcionamiento .net 4.0 código

El código que estoy tratando de ejecución es (e.Error contiene un error de Securtiy):

private void button10_Click(object sender, RoutedEventArgs e)
        {
            string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented"; 
            WebClient wc = new WebClient();

            // HOW DO I ADD A USER AGENT STRING (RESPONSE MAY VARY (I.E. HTML VS XML) IF PAGE THINKS CALL IS NOT CAPABABLE OF SUPPORTING XML TRANSFORMATIONS) 
            //wc.ResponseHeaders["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";

            wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
            wc.DownloadStringAsync(new Uri(url));    
        }

        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                string result = e.Result;

                XDocument ArmouryXML = XDocument.Parse(result);

                ShowGuildies(ArmouryXML);
            }
            else
            {
                MessageBox.Show("Something is complaining about security but not sure what!");
            }
        } 

Notas:

  1. C # 4.0
  2. El arsenal es un archivo XML - pero creo que vuelva a html debe la solicitud no sea desde un explorador que la transformación es compatible con XML. Pero no creo que estoy recibiendo este momento.
  3. El arsenal tiene un archivo de política entre dominios en él - esto puede ser la causa del error (no estoy seguro
  4. He subido a un servidor de producción
  5. Estoy probando de forma local utilizando la página web de IIS
  6. Voy loco!
  7. sitios web han hecho la sugerencia de que este problema se puede superar mediante la creación de un WebProxy -. Pero no tienen la primera pista de cómo hacer esto

Sería muy bueno si alguien pudiera asumir este reto y nos muestran todo lo que es posible. Yo preferiría una solución no-proxy en primer lugar, a continuación, tratar de un proxy.

Los detalles del error:

e.Error = {System.Security.SecurityException ---> System.Security.SecurityException: Error de seguridad. en System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) en System.Net.Browser.BrowserHttpWebRequest. <> c__DisplayClass5.

Cualquier inteligentes maestros codificadores por ahí que pueden resolver esta en su sueño?

Gracias si puede ayudar.

¿Fue útil?

Solución 3

SOLUCIONADO - utiliza un servicio WCF para actuar como un proxy debido a las restricciones de seguridad de dominio y de modificación de cabecera cruzadas. Gracias por todos los consejos.

Otros consejos

Cuando se ejecuta una aplicación de Silverlight en un navegador, la aplicación Silverlight sólo puede realizar solicitudes a las direcciones URL desde el mismo dominio que la aplicación se instala desde. Por ejemplo, si su aplicación Silverlight se instala desde http://yoursite.com/yourapp.xap, sólo se puede hacer WebClient solicitudes a otros URLs en http://yoursite.com/. Sus opciones son o bien crear una secuencia de comandos de proxy que pide al WoW Armería de su servidor, y que su aplicación Silverlight golpeó ese proxy, o ejecutar el Silverlight fuera del navegador y solicitar plena confianza.

Editar: En general, la mejor opción es un archivo de política entre dominios como se explica aquí . Por desgracia, no parece que wowarmory.com implementa el archivo de política de varios dominios.

que estaban en el camino correcto, sólo tiene que fijar el agente de usuario.

private void button10_Click(object sender, RoutedEventArgs e)
    {
        string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented"; 
        WebClient wc = new WebClient();

        // HOW DO I ADD A USER AGENT STRING (RESPONSE MAY VARY (I.E. HTML VS XML) IF PAGE THINKS CALL IS NOT CAPABABLE OF SUPPORTING XML TRANSFORMATIONS) 
        //wc.ResponseHeaders["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";

        wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
        wc.DownloadStringAsync(new Uri(url));    
    }

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            string result = e.Result;

            XDocument ArmouryXML = XDocument.Parse(result);

            ShowGuildies(ArmouryXML);
        }
        else
        {
            MessageBox.Show("Something is complaining about security but not sure what!");
        }
    } 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top