我在一个分配了5个IP的服务器上运行这个应用程序。我使用HttpWebRequest从网站获取一些数据。但当我建立连接时,我必须能够指定从5个I中的哪一个进行连接。HttpWebRequest是否支持这一点?如果没有,我可以从它继承一个类来改变它的行为吗?我需要这样的点子。
我现在的代码类似于:
System.Net.WebRequest request = System.Net.WebRequest.Create(link);
((HttpWebRequest)request).Referer = "http://application.com";
using (System.Net.WebResponse response = request.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}
发布于 2010-07-27 23:53:23
根据this的说法,没有。您可能必须下拉到使用套接字,我知道您可以选择本地IP。
编辑:实际上,这似乎是可能的。HttpWebRequest有一个ServicePoint属性,而这个属性又有BindIPEndPointDelegate,这可能就是您要找的。
给我点时间,我来举个例子...
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://stackoverflow.com");
req.ServicePoint.BindIPEndPointDelegate = delegate(
ServicePoint servicePoint,
IPEndPoint remoteEndPoint,
int retryCount) {
if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) {
return new IPEndPoint(IPAddress.IPv6Any, 0);
} else {
return new IPEndPoint(IPAddress.Any, 0);
}
};
Console.WriteLine(req.GetResponse().ResponseUri);
基本上,委托必须返回一个IPEndPoint。你可以选择你想要的任何东西,但是如果它不能绑定到它,它会再次调用委托,直到int.MAX_VALUE次。这就是为什么我要包含处理IPv6的代码,因为IPAddress.Any是IPv4。
如果你不关心IPv6,你可以摆脱它。此外,我将实际选择IPAddress作为练习留给读者:)
发布于 2013-08-13 06:16:52
试试这个:
System.Net.WebRequest request = System.Net.WebRequest.Create(link);
request.ConnectionGroupName = "MyNameForThisGroup";
((HttpWebRequest)request).Referer = "http://application.com";
using (System.Net.WebResponse response = request.GetResponse())
{
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}
然后尝试将ConnectionGroupName设置为您希望使用的每个源ip的不同内容。
编辑:与上面答案中的IP绑定委托一起使用。
https://stackoverflow.com/questions/3345387
复制相似问题