2010-11-17 23 views
5

Estoy enviando datos a un servidor y ejecuto BeginGetRequestStream, luego EndGetRequestStream, escribo mis datos POST para completar RequestStream y llamo BeginGetResponse.Silverlight SecurityException

BeginGetResponse devuelve correctamente y luego me llaman:

Dim response As HttpWebResponse = CType(MyHttpRequest.EndGetResponse(asynchronousResult), HttpWebResponse) 

Esta línea lanza el error folloing SecurityException:

{System.Security.SecurityException ---> System.Security.SecurityException: Security error.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.b__0(Object sendState)

--- End of inner exception stack trace ---
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at EtsyV2NetSL.WebQuery.POST_ResponseCallback(IAsyncResult asynchronousResult)}

Así que lo primero que pensé fue que estaba siendo bloqueada por el servidor con su clientaccesspolicy .xml o crossdomain.xml. Me he disparado hasta violinista y vi lo siguiente:

GET http://openapi.etsy.com/clientaccesspolicy.xml > 596 (text/xml) 
GET http://openapi.etsy.com/crossdomain.xml > 200 OK (application/xml) 

lo que he comprobado su crossdomain.xml y la configuración aparece bien:

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-access-from domain="*"/> 
</cross-domain-policy> 

He golpeado un callejón sin salida en el intento de resolver este problema. Estoy ejecutando la aplicación de prueba en mi máquina de desarrollo de VS.

¿Alguien tiene alguna idea de por qué Silverlight arrojaría este error?

Gracias

Respuesta

1

tuve que lidiar con un problema muy similar en la actualidad - sin embargo en lugar de un HTTP POST, yo estaba tratando de hacer una llamada de servicio WCF.

Aquí está el comentario que puse en mi código: por favor, avíseme si no es lo suficientemente claro como para ser útil.

// NB: Cross-domain bug 
// If you end up here with a System.Security.SecurityException "Security error." 
// Check that you're not trying to cross zones when making a service call 
// (eg: Accessing Trigger Driver TimeSource service on http://IASWEB01/ when accessing the site via usertest.local 
// or any other URI with dots in it - yes it seems crazy) 

Esto parece ser una "característica" de seguridad. Con la llamada a WCF recibí esta excepción incluso antes de que el cliente de Silverlight intentara obtener el clientaccesspolicy.xml del host de destino. ¡Problema muy molesto sin una solución real a la vista!

+0

Como puede ver en mi ruta de Fiddler, Silverlight comprueba y encuentra un archivo de política "compatible con versiones anteriores". Entonces puedo emitir comandos GET a través de dominios muy felizmente. Sin embargo, estoy trabajando con una empresa de terceros y no tengo control sobre los archivos de política utilizados. El código que utilizo funciona bien con WinForms/ASP.NET/WPF; He modificado el código de Silverlight pero estoy llegando al error de excepción de seguridad. Parece de Silverlight que envía errores y multa para obtener la respuesta; sin embargo, al realizar una búsqueda, no se encuentran los datos publicados. Entonces los métodos POST/PUT arrojan las excepciones de Seguridad. – Graeme

+0

¿Y pueden ver el POST saliendo en Fiddler? Todavía me parece que los problemas están relacionados, es decir: falla antes de que la solicitud http se complete o incluso se construya por completo. – bszom

+1

Fiddler no capta el POST, por lo que no puede decirlo. – Graeme

Cuestiones relacionadas