2010-03-23 2 views
2

Win7 PC에 VMWare 서버에 사용되는 몇 가지 가상 네트워크 어댑터가 있습니다. 이러한 어댑터를 사용하도록 설정하면 내 HttpWebRequest 시간이 초과됩니다. 바인딩 할 어댑터를 실제로 말해야합니까?여러 네트워크 어댑터가있는 HttpWebRequest가 시간 초과되었습니다.

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.AbsoluteUri + "etc.txt"); 
      request.Timeout = 2000; 

      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
       { 
        return reader.ReadToEnd(); 
       } 
      } 

UPDATE

나는이 추측하고있어 공통의 문제입니다. 아무도 표준 방법을 처리 할 수 ​​있습니까? 나는 그들이 비 기술이기 때문에 인터페이스에 대해 사용자에게 정말로 물어볼 수 없다. Rohit의 대답은 ServicePoint를 설정하는 방법을 보여주는 좋은 출발점입니다.

답변

4

Tim, 새 어댑터에 URL 경로가있어 목적지까지 도달하지 못하기 때문에 시간 초과가 표시됩니다.

public delegate IPEndPoint BindIPEndPoint(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount); 

당신은

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
req.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback); 

은 자세한 내용은 http://www.netbrick.net/blog/PermaLink,guid,b9c255d9-74b4-45ab-8fd0-c9a04784655a.aspx보기 ...

private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint,IPEndPoint remoteEndPoint, int retryCount) 
{ 
    if(retryCount < 3) 
     return new IPEndPoint(IPAddress.Parse("192.168.10.60"), 0); 
    else 
     return new IPEndPoint(IPAddress.Any, 0); 
} 

로 사용할 수 있습니다.

0

이어서 Rohits 대답을 참조하십시오. 이 모든 어댑터를 시도 할 때 잘 작동합니까?

private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) 
    { 
     List<IPEndPoint> endPoints = new List<IPEndPoint>(); 

     foreach (NetworkInterface netinface in NetworkInterface.GetAllNetworkInterfaces()) 
     { 
      foreach (IPAddressInformation unicast in netinface.GetIPProperties().UnicastAddresses) 
      { 
       if(unicast.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
        endPoints.Add(new IPEndPoint(unicast.Address, 80)); 
      } 
     } 

     if (retryCount > endPoints.Count - 1) 
      return new IPEndPoint(IPAddress.Any, 80); 
     else 
      return endPoints[retryCount]; 
    } 
관련 문제