2012-09-27 17 views
7

Câu hỏi của tôi xuất phát từ một vấn đề mà tôi đã phát hiện trên mạng công ty. Tôi đang phát triển với Windows 8 vì vậy trong trường hợp của tôi IE10 được thiết lập để tự động phát hiện các thiết lập proxy.Làm cách nào để có đối tượng WebProxy mặc định mới trong ứng dụng C# Windows Store?

Trong ứng dụng C# của tôi, tôi sử dụng System.Net.Http.HttpClient. Tôi đã tìm thấy rằng đối tượng IWebProxy mặc định cho toàn bộ quá trình của tôi trở nên không sử dụng được nếu tôi chuyển sang ngoại tuyến, thực hiện yêu cầu không thành công và sau đó trở lại trực tuyến. Điều quan trọng là yêu cầu không thành công, nếu không, không có vấn đề gì. Đây là một ví dụ về cách tôi có thể xử lý đối tượng proxy mong manh này.

var defaultHandler = new HttpClientHandler(); 
var fragileProxy = defaultHandler.Proxy; 
var httpClient = new HttpClient(defaultHandler); 

Sau một số thử nghiệm tôi phát hiện ra rằng tôi có thể có được một proxy làm việc bằng cách gọi System.Net.WebProxy.GetDefaultProxy();

Sau đó, tôi đã triển khai NetworkChangAwareProxy: IWebProxy. Đúng vậy, một proxy cho IWebProxy của tôi. Bên trong nó chỉ đi và nhận một WebProxy.GetDefaultProxy mới() bất cứ khi nào NetworkChange.NetworkAddressChanged.

Tôi kết nối nó khi ứng dụng bắt đầu và sự cố sẽ biến mất.

WebRequest.DefaultWebProxy = new NetworkChangeAwareProxy(); 

Hy vọng ai đó sẽ cho tôi biết có cách tốt hơn để giải quyết vấn đề này. Câu hỏi cụ thể của tôi là về Ứng dụng kiểu ứng dụng trên Store. (ứng dụng metro)

System.Net.WebProxy.GetDefaultProxy() không khả dụng và System.Net.HttpWebRequest.DefaultWebProxy chỉ trả lại cùng một proxy không tồn tại sau khi chuyển sang ngoại tuyến và quay lại.

Làm cách nào tôi có thể xử lý đối tượng IWebProxy mới trong ứng dụng C# Windows Store?

+0

Bạn đang tái sử dụng các đối tượng WebRequest giống nhau không? –

Trả lời

0

Bạn có thể sử dụng các yêu cầu web để có được proxy:

var req = WebRequest.Create(@"api/stat/stats/"); 
req.Proxy = WebRequest.GetSystemWebProxy(); 
req.Timeout = 10000; 
req.Method = "GET"; 
Các vấn đề liên quan