ServicePoint.BindIPEndPointDelegate заморозить HTTP-запрос - PullRequest
0 голосов
/ 05 марта 2019

У меня 2 IP-адреса на моем сервере.По умолчанию ip первого интерфейса используется в каждом приложении.Но я хочу связать мою программу на C # с другим IP.Я использую код из этой темы Выберите одно из многих подключений к Интернету для приложения .Все работает правильно, но один момент.Мой простой http-запрос по умолчанию ip работает быстрее, чем на 50 мсек, чем связанный.Почему так?Я подозреваю, потому что я использую BindIPEndPointDelegate, но я не понимаю, почему.

UseIP ip = new UseIP("10.8.17.245");

HttpWebRequest req = ip.CreateWebRequest(new Uri("https://api.binance.com/api/v1/ticker/24hr?symbol=BTCUSDT"));
using(WebResponse response = req.GetResponse()) {
 Stream dataStream = response.GetResponseStream();
 StreamReader reader = new StreamReader(dataStream);
 string responseFromServer = reader.ReadToEnd();
}

public class UseIP {
 public string IP {
  get;
  private set;
 }

 public UseIP(string IP) {
  this.IP = IP;
 }

 public HttpWebRequest CreateWebRequest(Uri uri) {
  ServicePoint servicePoint = ServicePointManager.FindServicePoint(uri);
  servicePoint.BindIPEndPointDelegate = (servicePoint1, remoteEndPoint, retryCount) => {
   IPAddress address = IPAddress.Parse(this.IP);
   return new IPEndPoint(address, 0);
  };

  //Will cause bind to be called periodically
  servicePoint.ConnectionLeaseTimeout = 0;

  HttpWebRequest req = (HttpWebRequest) WebRequest.Create(uri);
  //will cause bind to be called for each request (as long as the consumer of the request doesn't set it back to true!
  req.KeepAlive = false;

  return req;
 }
...