2010-11-17 13 views
5

Piszę dane do serwera i pomyślnie wykonuję BeginGetRequestStream, następnie EndGetRequestStream, zapisz moje dane POST, aby wypełnić RequestStream, i wywołaj BeginGetResponse.Silverlight SecurityException

BeginGetResponse powodzeniem wraca i wtedy zadzwonić:

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

Linia ta rzuca błąd 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)}

Więc moją pierwszą myślą było to, że był blokowany przez serwer z ich clientaccesspolicy .xml lub crossdomain.xml. Mam rozgrzana Skrzypek i zobaczył, co następuje:

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

Więc sprawdziłem ich crossdomain.xml i ustawienia pojawiają się 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> 

Mam trafienie w ślepy zaułek, próbując rozwiązać ten problem problem. Używam aplikacji testowej na moim komputerze od VS.

Czy ktoś ma jakieś pomysły, dlaczego Silverlight będzie rzucić ten błąd?

Dzięki

Odpowiedz

1

miałem do czynienia z bardzo podobnym problemem dzisiaj - jednak zamiast HTTP POST, ja próbuje zrobić wywołanie usługi WCF.

Oto komentarz, który umieściłem w moim kodzie - proszę dać mi znać, jeśli nie jest on wystarczająco jasny, aby być pomocnym.

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

Wydaje się, że jest to "funkcja bezpieczeństwa". W wywołaniu WCF otrzymałem ten wyjątek, zanim klient Silverlight próbował pobrać plik clientaccesspolicy.xml z hosta docelowego. Bardzo irytujący problem bez prawdziwego rozwiązania w zasięgu wzroku!

+0

Jak widać z mojego śladu Fiddler, Silverlight sprawdza i znajduje plik zasad zgodności "wstecz". Mogę więc całkiem swobodnie wydawać polecenia GET w domenach. Pracuję jednak z firmą zewnętrzną i nie mam kontroli nad używanymi plikami zasad. Kod, który używam działa dobrze z WinForms/ASP.NET/WPF; Udoskonaliłem kod dla Silverlight, ale trafiłem na błąd Security Exception. Wygląda na to, że z Silverlight wysyła drobne błędy i błędy podczas uzyskiwania odpowiedzi, jednak podczas wyszukiwania nie znaleziono odnalezionych danych. Tak więc metody POST/PUT rzucają wyjątki bezpieczeństwa. – Graeme

+0

Czy widzisz POST wychodzącego w Skrzypek? Nadal wydaje mi się, że problemy są powiązane, tj .: błąd przed zakończeniem żądania HTTP lub nawet całkowicie skonstruowany. – bszom

+1

Skrzypek nie łapie POST-a więc nie może powiedzieć. – Graeme

Powiązane problemy