2012-01-04 27 views
15

Tôi đã tạo ứng dụng WinForms đơn giản sử dụng webservice miễn phí http://www.webservicemart.com/uszip.asmx. Nhưng ứng dụng này thất bại trong việc sử dụng hoạt động dịch vụ với lỗi:WCF Client - 407 Xác thực Proxy Bắt buộc khi chạy webservice

The remote server returned an unexpected response: (407) Proxy Authentication Required (The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied)

Mã tạo proxy và gây nên hoạt động dịch vụ:

ChannelFactory<ServiceReference1.USZipSoap> proxy = new ChannelFactory<ServiceReference1.USZipSoap>("USZipSoap"); 
ServiceReference1.USZipSoap client = proxy.CreateChannel(); 
string str = client.ValidateZip("12345"); 
MessageBox.Show(str); 

là vấn đề này với một mạng lưới của công ty tôi hay đây là một proxy trên bên của webservicemart.com?

Tôi đã googled rất nhiều thông tin về thay đổi tệp cấu hình, tạo liên kết tùy chỉnh, v.v. Nhưng tôi cảm thấy thiếu hiểu biết cơ bản hơn ...
Nếu lỗi này là về máy chủ ISA của mạng công ty nên tạo cấu hình cho ISA Server để không hạn chế tôi sử dụng các dịch vụ web bên ngoài?

+1

Có vấn đề với proxy trong mạng cục bộ của bạn. Hiển thị cấu hình ràng buộc của bạn và cũng kiểm tra xem bạn có cấu hình proxy trong Internet Explorer hay không. –

+0

Tôi chỉ chuẩn bị cấu hình của mình nhưng nó quá lớn để vừa với kích thước bình luận và tôi đã phải đối mặt với giới hạn nói rằng tôi không thể trả lời các câu hỏi của riêng mình.
Nhưng dù sao ... Tôi thực sự có proxy được cấu hình trong cài đặt trình duyệt của tôi.
Tôi đã có một số tiến bộ sau khi tôi thay đổi useDefaultWebProxy từ true thành false. Và bây giờ tôi có EndpointNotFoundException với thông điệp "Không có điểm cuối lắng nghe tại http://www.webservicemart.com/uszip.asmx có thể chấp nhận thông báo. Điều này thường được gây ra bởi một địa chỉ không chính xác hoặc hành động SOAP. Xem InnerException, nếu có , để biết thêm chi tiết." –

+0

Và InnerException loại System.Net.WebException với thông báo "Tên từ xa không thể được giải quyết: 'www.webservicemart.com'" –

Trả lời

43

Trong cấu hình ràng buộc của bạn, hãy đảm bảo rằng useDefaultWebProxy được đặt thành true - nó sẽ sử dụng cấu hình bạn đã tìm thấy trong IE. Trong tập tin cấu hình của bạn thêm đoạn mã để đảm bảo mặc định sau thông tin của bạn được sử dụng để xác thực trên máy chủ proxy:

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net> 
+0

Nó hoạt động! Cảm ơn nhiều! :) –

+0

Thật thú vị khi lưu ý rằng điều này dường như không giống như thiết lập thuộc tính trên proxy mặc định. –

+0

@VincentHubert Nó thậm chí còn thú vị hơn để biết những gì không giống nhau và không có ý kiến ​​treo ở đó –

1

Dường như tất cả lưu lượng truy cập trong công ty của bạn đang được chuyển hướng qua proxy. Bạn có thể duyệt đến dịch vụ web từ IE của bạn và xem wsdl của nó và gọi trang thử nghiệm để xem một số kết quả. Nếu đúng như vậy, hãy thử thêm phần bên dưới vào web.config của bạn:

<system.net> 
<defaultProxy>  
<proxy proxyaddress="<your proxy address>" bypassonlocal="true" /> 
</defaultProxy> 
</system.net> 

Bạn có thể tìm địa chỉ proxy từ cài đặt của IE.

LƯU Ý: Khi bạn chuyển sang các môi trường khác nhau thì bạn cần phải đảm bảo rằng trường hợp tương tự khác mà bạn cần phải xóa cấu hình ở trên.

+0

Cảm ơn bạn rất nhiều vì đã trả lời. Tôi đã thực hiện một số tiến bộ trong việc giải quyết vấn đề này.Tôi đã thay đổi useDefaultWebProxy từ true thành false và sau đó có vẻ như tôi đã thông qua xác thực proxy của mình. Nhưng tôi vẫn còn một ngoại lệ khác nói rằng "Không có điểm cuối nghe tại http://www.webservicemart.com/uszip.asmx có thể chấp nhận thông điệp." Tôi cũng đã thử một dịch vụ web miễn phí khác và chỉ nhận được chính xác lỗi tương tự. –

+0

Tôi đã thử truy cập vào dịch vụ web ở trên và hoạt động tốt. Nếu bạn cần trợ giúp chỉ cần đăng thêm một số cập nhật và có thể thử giúp bạn. – Rajesh

2

này làm việc cho tôi ... thay thế 10.1.0.50 và số cổng với IP máy chủ proxy của bạn

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="False" proxyaddress="http://10.1.0.50:8080" bypassonlocal="True" /> 
    </defaultProxy> 
    </system.net> 
+0

Tôi đang sử dụng @Ladislav Mrnka answare, nhưng nó đã làm việc cho tôi quá. – MFedatto

0

Đôi khi trong tương lai.

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials; 
Các vấn đề liên quan