2010-11-17 25 views
5

Tôi đang POST dữ liệu đến một máy chủ và thực hiện thành công BeginGetRequestStream, sau đó EndGetRequestStream, ghi dữ liệu POST của tôi để điền vào RequestStream và gọi BeginGetResponse.Silverlight SecurityException

BeginGetResponse trả về thành công và sau đó tôi gọi:

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

Dòng này ném Lỗi 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)}

Vì vậy, suy nghĩ đầu tiên của tôi là tôi đã bị chặn bởi các máy chủ với clientaccesspolicy của họ .xml hoặc crossdomain.xml. Tôi đã bắn lên Fiddler và thấy như sau:

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

Vì vậy, tôi đã kiểm tra crossdomain.xml của họ và các thiết lập xuất hiện 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> 

tôi đã trúng một ngõ cụt trong cố gắng giải quyết này vấn đề. Tôi đang chạy ứng dụng thử nghiệm trên máy tính dev của tôi từ VS.

Có ai có bất kỳ ý tưởng nào về lý do tại sao Silverlight sẽ ném lỗi này?

Cảm ơn

Trả lời

1

Nó có vẻ như đó là một khách hàng vấn đề chính sách truy cập, kiểm tra này:

http://forums.silverlight.net/forums/p/26566/90867.aspx

Nó làm việc cho tôi.

+0

Đúng, câu lệnh "" trong tệp clientaccesspolicy.xml đã khắc phục sự cố trong trường hợp của tôi. Cảm ơn bạn đã giúp đỡ! –

1

Tôi đã xử lý một vấn đề rất giống hôm nay - tuy nhiên thay vì một HTTP POST, tôi đã cố gắng thực hiện cuộc gọi dịch vụ WCF.

Đây là nhận xét tôi đã đặt trong mã của mình - vui lòng cho tôi biết nếu nó không đủ rõ ràng để hữu ích.

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

Đây có vẻ là một số tính năng bảo mật. Với cuộc gọi WCF, tôi đã nhận ngoại lệ này ngay cả trước khi trình khách Silverlight cố gắng tìm nạp tệp clientaccesspolicy.xml từ máy chủ đích. Vấn đề rất khó chịu mà không có một giải pháp thực sự trong tầm nhìn!

+0

Như bạn có thể thấy từ theo dõi Fiddler của tôi, Silverlight kiểm tra và tìm thấy tệp chính sách 'tương thích ngược'. Vì vậy, tôi có thể phát lệnh GET trên các miền khá vui vẻ. Tuy nhiên, tôi đang làm việc với một công ty bên thứ ba và không có quyền kiểm soát các tệp chính sách được sử dụng. Mã tôi usung hoạt động tốt với WinForms/ASP.NET/WPF; Tôi đã tinh chỉnh mã cho Silverlight nhưng đang nhấn lỗi Bảo mật ngoại lệ. Nó xuất hiện từ Silverlight rằng nó sẽ gửi tiền phạt và lỗi trên nhận được phản ứng tuy nhiên khi thực hiện tra cứu dữ liệu được đăng không tìm thấy. Vì vậy, các phương thức POST/PUT đang ném các ngoại lệ bảo mật. – Graeme

+0

Và bạn có thể xem POST đang diễn ra ở Fiddler không? Dường như với tôi các vấn đề có liên quan, tức là: thất bại trước khi yêu cầu http được hoàn thành hoặc thậm chí hoàn toàn được xây dựng. – bszom

+1

Fiddler không bắt được POST - vì vậy không thể nói được. – Graeme

Các vấn đề liên quan