2012-01-17 28 views
6

Tôi đang cố gọi một dịch vụ web. Tôi cần sử dụng proxy sử dụng tập lệnh WPAD. URL cho tập lệnh WPAD này khác nhau đối với các lần triển khai ứng dụng khác nhau.Tự động sử dụng WebProxy với tập lệnh WPAD

Mặc dù IE có các phiên bản chính xác, ứng dụng đang chạy dưới dạng dịch vụ cửa sổ đang chạy trong tài khoản Hệ thống cục bộ, do đó ứng dụng không biết cài đặt IE cho người dùng windows này.

Đưa sau trong app.config hoạt động:

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true" > 
     <proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/> 
    </defaultProxy> 
</system.net> 

Nhưng điều này có những hạn chế mà nó không thể được cấu hình bởi người sử dụng. Có cách nào để làm điều trên từ động (C# -) mã? Tôi cũng nghi ngờ ở trên sẽ thay đổi hành vi của dịch vụ web mà không nên đi qua một proxy (nhưng tôi đã không xác minh điều đó).

Tại http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx tôi thấy nội dung hữu ích: "(Đối với một ví dụ chứng minh rằng sử dụng tính năng WPAD, xem tài liệu cho lớp IWebProxyScript.)" Nhưng tôi đã không tìm thấy ví dụ :(

Trả lời

1

Bài viết này. về dự án mã cho thấy cách sử dụng API cửa sổ để thực thi tập lệnh PAC và trả lại chi tiết proxy chính xác cho một url nhất định: http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy

Bạn có thể sử dụng chức năng để tìm hiểu chi tiết proxy và sau đó định cấu hình các đối tượng dịch vụ web proxy trực tiếp hoặc thay đổi WebRequest.DefaultProxy.

+0

Tôi tìm thấy một cái gì đó tương tự ở đây: [link] (http://www.pcreview.co.uk/forums/winhttpgetproxyforurl-t1862181.html) nhưng WPADs có thể trả về một số máy chủ proxy (không vượt quá và/hoặc cân bằng tải, xem [ link] (http://en.wikipedia.org/wiki/Proxy_auto-config)). Sau đó nó trả về dấu chấm phẩy tách ra. Các mục nhập trở về "TRỰC TIẾP" dường như biến mất bằng phương pháp này. Vì vậy, mặc dù đây là một bước đi đúng hướng, nó dường như không hoàn toàn đối với tôi. –

+0

Bạn không thể sử dụng string.split trên giá trị trả về để nhận danh sách các mục nhập, và sau đó thử chúng theo thứ tự, mặc định không sử dụng proxy nếu danh sách trống? – sga101

+0

Đó là những gì tôi đã làm. Nhưng tôi không thích nó: - Bây giờ tôi có một vòng lặp yêu cầu web cho mỗi proxy tôi tìm thấy - Tôi không biết cách xử lý DIRECT. Bây giờ tôi không sử dụng proxy nếu tôi nhận được một danh sách trống, nhưng tôi đã thấy các ví dụ trả về cả proxy và DIRECT, vì vậy đó có thể không thực sự là cách thực hiện đúng. - Nếu yêu cầu web sắp hết thời gian, tôi thực sự không biết tại sao. Có thể là proxy, có thể là cái gì khác. Vì vậy, tôi lặp lại yêu cầu với một proxy khác. Có thể một thời gian chờ khác? Và người dùng chờ đợi ... - Tôi thực sự không muốn làm điều này. Tôi muốn hệ điều hành xử lý nó ... –

0

IWebProxyScript được sử dụng nội bộ bởi chính WebProxy.

Nếu bạn khởi tạo WebProxy với URL thành tập lệnh WPAD, nó sẽ giải quyết URL chính xác cho các yêu cầu được chuyển đến nó. Bạn có thể đặt WebProxy đó thành một WebRequest và nó sẽ tự động xử lý việc thiết lập đúng URL proxy cho mục tiêu của yêu cầu.

WebRequest request = WebRequest.Create("http://targeturl"); 
request.Proxy = new WebProxy("http://url.to/wpad.dat"); 

Bạn cũng có thể nhận ra URL proxy cho một mục tiêu nhất định như vậy:

WebProxy proxy = new WebProxy("http://url.to/wpad.dat");  
Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl")); 

này không làm việc cho các kịch bản PAC.

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