2010-11-17 7 views
5

Sto postando dati a un server ed eseguo correttamente BeginGetRequestStream, quindi EndGetRequestStream, scrive i miei dati POST per riempire il RequestStream e chiama BeginGetResponse.Silverlight SecurityException

BeginGetResponse ritorna con successo e ho quindi chiamare:

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

Questa linea genera l'errore 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)}

Così il mio primo pensiero è stato che ero stato bloccato dal server con il loro clientaccesspolicy .xml o crossdomain.xml. Ho sparato su Fiddler e ho visto il seguente:

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

così ho controllato la loro crossdomain.xml e le impostazioni appaiono ok:

<!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> 

ho colpito un vicolo cieco per cercare di risolvere questo problema. Sto eseguendo l'app di test sulla mia macchina di sviluppo da VS.

Qualcuno ha qualche idea sul motivo per cui Silverlight avrebbe lanciato questo errore?

Grazie

risposta

1

ho affrontato un problema molto simile oggi - tuttavia, invece di un HTTP POST, stavo cercando di fare una chiamata di servizio WCF.

Questo è il commento che ho inserito nel mio codice. Fatemi sapere se non è abbastanza chiaro per essere utile.

// 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) 

Questa sembra essere una "funzionalità" di sicurezza. Con la chiamata WCF ho ottenuto questa eccezione anche prima che il client Silverlight tentasse di recuperare il clientaccesspolicy.xml dall'host di destinazione. Problema molto fastidioso senza una vera soluzione in vista!

+0

Come si può vedere dalla traccia di Fiddler, Silverlight controlla e trova un file di criteri 'retrocompatibile'. Quindi posso emettere comandi GET su domini abbastanza felicemente. Tuttavia sto lavorando con una società di terze parti e non ho il controllo sui file dei criteri utilizzati. Il codice che sto usando funziona bene con WinForms/ASP.NET/WPF; Ho ottimizzato il codice per Silverlight ma sto riscontrando l'errore Security Exception. Appare da Silverlight che invia errori e errori nell'ottenere la risposta, tuttavia quando si effettua una ricerca i dati inviati non vengono trovati. Quindi i metodi POST/PUT stanno lanciando le eccezioni di sicurezza. – Graeme

+0

E puoi vedere il POST uscire con Fiddler? Mi sembra ancora che i problemi siano correlati, ovvero: fallimento prima che la richiesta http sia completata o anche completamente costruita. – bszom

+1

Fiddler non cattura il POST - quindi non posso dirlo. – Graeme