2010-06-27 15 views
5

Điều này chỉ xảy ra trên một trong các máy của tôi. Tôi nghĩ rằng đó là một vấn đề cấu hình môi trường. Tất cả các máy chạy tường lửa phần mềm ESET Smart Security. Ý tưởng nào?DownloadStringAsync chặn chuỗi trong 14 giây trên lần gọi đầu tiên

using System; 
using System.Net; 
using System.Diagnostics; 
using System.Threading; 

namespace Test 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      bool exit = false; 
      WebClient wc = new WebClient(); 
      DateTime before = DateTime.Now; 
      wc.DownloadStringAsync(new Uri("http://74.125.95.147"), "First"); // IP Address of google, so DNS requests don't add to time. 
      wc.DownloadStringCompleted += delegate(object sender, DownloadStringCompletedEventArgs e) 
      { 
       Debug.WriteLine(e.UserState + " Call: " + (DateTime.Now - before)); 

       if ((string)e.UserState == "First") 
       { 
        before = DateTime.Now; 
        wc.DownloadStringAsync(new Uri("http://74.125.95.147"), "Second"); 
       } 
       else 
        exit = true; 
      }; 

      /* 
      * 
      * Output: 
      * 
      * First Call: 00:00:13.7647873 
      * Second Call: 00:00:00.0740042 
      * 
      */ 

      while (!exit) 
       Thread.Sleep(1000); 
     } 
    } 
} 
+2

Điều này có thể là do Tự động phát hiện proxy. Mọi thay đổi nếu bạn đặt WebClient.Proxy thành GlobalProxySelection.GetEmptyWebProxy? http://msdn.microsoft.com/en-us/library/system.net.webclient.proxy.aspx http://msdn.microsoft.com/en-us/library/system.net.globalproxyselection.getemptywebproxy.aspx – dtb

+0

Đúng, đã sửa nó. Cảm ơn! Cuộc gọi đầu tiên: 00: 00: 00.1680096 Cuộc gọi thứ hai: 00: 00: 00.0400023 – Mango

+2

@dtb, thêm câu trả lời đó làm câu trả lời. Nó xứng đáng là một cuộc bỏ phiếu hoặc hai. –

Trả lời

12

Máy của bạn được định cấu hình để thực hiện Tự động phát hiện proxy.

Bạn có thể vô hiệu hóa nó ở đây:

Screenshot

Ngoài ra, bạn có thể ghi đè proxy sử dụng bởi các WebClient. Đặt số WebClient.Proxy Property thành null để chỉ định không sử dụng proxy. Bất kỳ cài đặt proxy rõ ràng nào đều tắt tính năng Tự động phát hiện proxy.

client.Proxy = null; 

Tuy nhiên, bạn nên cung cấp cho người dùng tùy chọn định cấu hình proxy trong ứng dụng trong trường hợp này, vì một số người dùng phải sử dụng proxy khi truy cập Web.

+7

Vì GlobalProxySelection không được chấp nhận, chỉ cần đặt Proxy thành null Ngoài ra, để thực hiện điều này trên toàn cầu, WebRequest.DefaultWebProxy = null; – Mango

+4

Có một nhược điểm để làm điều này? Nếu đây là phần mềm máy khách và máy khách đang sử dụng proxy, yêu cầu sẽ không thành công? – NickAldwin

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