2009-05-13 37 views
7

Tôi cần thêm một chức năng trong một ứng dụng (C#) sẽ sử dụng dịch vụ web (dịch vụ XML SOAP).Gọi một dịch vụ web từ phía sau máy chủ proxy

Bây giờ ứng dụng này có thể (và chủ yếu) được sử dụng trong môi trường công ty có máy chủ proxy tại chỗ.

Tôi hiểu các dịch vụ SOAP sử dụng giao thức HTTP và do đó nên sử dụng cổng 80, thường được mở. Có đúng là ứng dụng có thể sử dụng dịch vụ web mà không cần bất kỳ mã hóa đặc biệt nào hay tôi sẽ cần phải viết mã đặc biệt để phát hiện cài đặt proxy hoặc một số vấn đề khác mà bạn thấy?

EDIT: Dịch vụ web là một dịch vụ công khai trên internet. Nó không phải trên cùng một mạng.

Trả lời

6

ĐƯỢC. Vì vậy, tôi đã làm một số thí nghiệm và nó chỉ ra rằng chúng ta cần phải viết một số mã để làm cho nó hoạt động từ phía sau máy chủ proxy. (Mặc dù tôi sẽ cảm thấy thích hơn là một giải pháp tốt hơn)

Vì vậy, nó thực sự khoan xuống để hỏi chi tiết máy chủ proxy từ người dùng và sau đó cấu hình các lớp proxy dịch vụ cho máy chủ proxy như sau:

 
var networkCredentials = new NetworkCredential ("username", "password", "domain"); 
WebProxy myProxy = new WebProxy ("W.X.Y.Z:NN", true) {Credentials = networkCredentials}; 
var service = new iptocountry { Proxy = myProxy }; 
string result = service.FindCountryAsString ("A.B.C.D"); 

Tôi đã viết một bài kiểm tra và sử dụng dịch vụ web miễn phí IP To Country.

Sử dụng mã trên, tôi có thể sử dụng dịch vụ web thành công.

+1

Bạn không thể thực hiện điều này ở phần tử cấu hình ? –

+0

Tôi đã cố gắng sử dụng mã (không phải tệp cấu hình mặc dù) nhưng nó không hoạt động. Thực ra, ứng dụng mà tôi dự định sử dụng dịch vụ này là một ứng dụng cửa sổ. Không thực sự chắc chắn nó có quan trọng hay không. – Hemant

-1

Nếu dịch vụ web của bạn nằm trên cùng một mạng nội bộ với ứng dụng khách gọi là webservice, thì nó sẽ không thông qua proxy.

+0

số Webservice là một dịch vụ công bố rộng rãi trên internet. Nó không phải trên cùng một mạng. – Hemant

-1

Miễn là lưu lượng truy cập web (cổng 80) được cho phép, bạn không cần phải làm gì đặc biệt. Từ các cuộc gọi dịch vụ web quan sát của máy chủ proxy/proxy giống như bất kỳ lưu lượng HTTP nào khác.

10

Nó sẽ sử dụng cổng 80 theo mặc định và bạn không cần phải thực hiện thêm bất kỳ mã nào.

Nếu bạn cần phải đi qua một proxy của một số loại, tất cả các bạn cần làm là thêm dòng sau vào web.config của bạn:

<system.net> 
    <defaultProxy> 
     <proxy proxyaddress="http://yourproxyserver:80" /> 
    </defaultProxy> 
    </system.net> 

Bạn cũng có thể làm điều đó thông qua mã sử dụng này:

WebRequest.DefaultWebProxy = new WebProxy("http://yourproxyserver:80/",true); 
5

Mã sẵn có (WebClient, WCF, HttpWebRequest, v.v.) tất cả đều sử dụng cấu hình WinHTTP để lấy cấu hình proxy. Vì vậy, tất cả những gì bạn cần làm là cấu hình WinHTTP để biết về proxy!

Trong XP, đây là:

proxycfg -u 

đó nhập khẩu các thiết lập từ thiết lập proxy IE của người dùng (WinInet).

Trên Vista/etc, bạn sử dụng

netsh winhttp 

(và một số subcommand như "nhập khẩu")

chưa được kiểm tra, nhưng thử:

netsh winhttp import proxy source=ie 

Sau đó, mã NET của bạn tất cả nên hoạt động thông qua proxy mà các ứng dụng có lẽ đã được định cấu hình để sử dụng IE, v.v.

+1

Có thể thực hiện ở trên thông qua mã không? Lý do là ứng dụng cần truy cập dịch vụ web là một ứng dụng biểu mẫu cửa sổ và có thể chạy trên một loạt các máy tính. Không thể yêu cầu người dùng thực hiện các bước trên. – Hemant

7

Bạn có thể sử dụng các thiết lập mặc định của bạn máy tính cục bộ:

System.Net.ServicePointManager.Expect100Continue = false; 
wsclient.Proxy= System.Net.HttpWebRequest.GetSystemWebProxy(); 
wsclient.Proxy.Credentials = CredentialCache.DefaultCredentials;  

và trong app.config thêm cấu hình này:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <settings> 
     <servicePointManager expect100Continue="false" /> 
    </settings> 
    </system.net> 
</configuration> 
Các vấn đề liên quan