2010-11-17 16 views
5

Je poste des données sur un serveur et j'exécute avec succès BeginGetRequestStream, puis EndGetRequestStream, écris mes données POST pour remplir le RequestStream et appelle BeginGetResponse.Silverlight SecurityException

BeginGetResponse retourne et je l'appelle alors avec succès:

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

Cette ligne lance la folloing SecurityException Erreur:

{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)}

Ma première pensée était que j'étais bloqué par le serveur avec leur clientaccesspolicy .xml ou crossdomain.xml. J'ai mis le feu jusqu'à Fiddler et vu ce qui suit:

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

Je vérifié leur crossdomain.xml et les paramètres apparaissent 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> 

J'ai frappé une impasse en essayant de résoudre ce problème. Je cours l'application de test sur ma machine de dev de VS.

Quelqu'un a-t-il une idée de la raison pour laquelle Silverlight émet cette erreur?

Merci

Répondre

1

j'eu affaire à un problème aujourd'hui très similaire - mais au lieu d'un HTTP POST, je tente de faire un appel de service WCF.

Voici le commentaire que j'ai placé dans mon code - s'il vous plaît laissez-moi savoir si ce n'est pas assez clair pour être 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) 

Cela semble être une «fonctionnalité» de sécurité. Avec l'appel WCF j'ai reçu cette exception avant même que le client Silverlight ait tenté d'extraire le clientaccesspolicy.xml de l'hôte cible. Problème très ennuyeux sans une vraie solution en vue!

+0

Comme vous pouvez le voir sur ma trace Fiddler, Silverlight vérifie et trouve un fichier de politique 'rétrocompatible'. Je peux donc émettre des commandes GET dans des domaines plutôt bien. Cependant, je travaille avec une société tierce et je n'ai aucun contrôle sur les fichiers de politique utilisés. Le code que je suis utilise fonctionne bien avec WinForms/ASP.NET/WPF; J'ai modifié le code pour Silverlight, mais je suis en train de corriger l'erreur Security Exception. Il apparaît à partir de Silverlight qu'il envoie amende et erreurs sur l'obtention de la réponse, mais lors d'une recherche, les données publiées ne sont pas trouvées. Les méthodes POST/PUT lancent donc les exceptions de sécurité. – Graeme

+0

Et pouvez-vous voir le message sortant dans Fiddler? Il me semble encore que les problèmes sont liés, c'est-à-dire: échec avant que la requête http ne soit complétée ou même complètement construite. – bszom

+1

Fiddler n'attrape pas le POST - donc ne peut pas dire. – Graeme