2010-11-25 22 views
12

Çoklu IP adreslerine sahip bir sunucum var. Şimdi http protokolü ile birkaç sunucu ile iletişim kurmam gerekiyor. Her sunucu, yalnızca sunucumun belirtilen bir ip adresinden isteği kabul eder. Ancak, .NET'te WebRequest (veya HttpWebRequest) kullanıldığında, istek nesnesi otomatik olarak bir ip adresi seçer. İsteği bir adresle bağlamak için zaten bulamıyorum.Web tarayıcımı .NET Framework ile belirtilen IP adresinden gönderebilir miyim?

Bunu yapmak zaten var mı? Ya da kendime bir web anketi uygulamalıyım? Bu yayını okuyup okumadığını

cevap

12

Sen ServicePoint.BindIPEndPointDelegate geri arama kullanmak gerekir. HttpWebRequest ilişkili yuva uzak ucuna bağlanmak üzere çalışmadan önce temsilci olarak adlandırılır

http://blogs.msdn.com/b/malarch/archive/2005/09/13/466664.aspx

. Eğer WebClient kullanarak bunu yapmak istiyorsanız

public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) 
{ 
    Console.WriteLine("BindIPEndpoint called"); 
     return new IPEndPoint(IPAddress.Any,5000); 

} 

public static void Main() 
{ 

    HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://MyServer"); 

    request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback); 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

} 
+1

Harika. Sorun sadece böyle basit bir şekilde çözüldü! Sağol Sam. –

+0

Bağlantı noktasını 5000 olarak ayarlamanızı önermiyorum. Bu bağlantı noktasında birden çok örnekle istekte bulunursanız, zamanaşımına neden olabilir. Bunun yerine, bağlantı noktasını 0 olarak ayarlıyorum ve tcp katmanının her zaman bağlantı noktası 80'den geçecek olan bağlantıları işlemesine izin verdim. – Mike

6

alt sınıf için gerekir:

var webClient = new WebClient2(IPAddress.Parse("10.0.0.2")); 

ve alt sınıfı: Herkes için

public class WebClient2 : WebClient 
{ 
    public WebClient2(IPAddress ipAddress) { 
     _ipAddress = ipAddress; 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = (WebRequest)base.GetWebRequest(address); 

     ((HttpWebRequest)request).ServicePoint.BindIPEndPointDelegate += (servicePoint, remoteEndPoint, retryCount) => { 

      return new IPEndPoint(_ipAddress, 0); 
     }; 

     return request; 
    } 
} 

(teşekkürler @Samuel önemli ServicePoint.BindIPEndPointDelegate bölüm

İlgili konular