HttpWebRequest.ServicePoint отличается от ServicePointManager.FindServicePoint - PullRequest
0 голосов
/ 28 августа 2018

У меня есть компьютер с тремя различными сетевыми интерфейсами. Я пытаюсь отправить запрос JSON через одно из этих устройств. Но по какой-то причине ServicePoint из WebRequest всегда неверно.

ПК IP1: 10.43.130.122

ПК IP2: 192.168.2.3

ПК IP3: 10,43,140,33

IP-адрес назначения: 10.43.130.152

В сети есть еще три компьютера. Все с тремя сетевыми интерфейсами, все в одном диапазоне IP. На всех остальных трех параметрах ServicePoint установлен правильно и JSON-запрос работает.

Вот мой код. Sp, sp2 и sp3 - просто отладочный код. sp и sp2 верны (IP-адрес назначения), но sp3 всегда неверен. Это всегда 192.168.25..9: 8919. Но как только я узнаю, что объект WebRequest получает свой ServicePoint от ServicePointManager. Так как это возможно?

private static bool QueryJson(string url, CancellationToken? cancellationToken, out string result)
{

        lock (webRequestLock)
        {
            HttpWebRequest dataRequest = WebRequest.Create(url) as HttpWebRequest;

            if (dataRequest == null) throw new Exception("dataRequest is not a HttpWebRequest");
            dataRequest.UserAgent = "iSAM Velodyne Interface";

            dataRequest.ContentType = "";
            dataRequest.SendChunked = false;
            dataRequest.ServicePoint.UseNagleAlgorithm = false;
            dataRequest.Method = "GET";
            dataRequest.Accept = "*/*";
            dataRequest.KeepAlive = false;
            dataRequest.ServicePoint.Expect100Continue = false;
            dataRequest.Timeout = TIMEOUT;

            // sp and sp2 ServicePoint have the expected destination IP
            var sp = ServicePointManager.FindServicePoint(dataRequest.RequestUri);
            var sp2 = ServicePointManager.FindServicePoint(new Uri(url));
            // sp3 does does not have the expected IP
            // (Why isn't it getting the same ServicePoint as above?)
            var sp3 = dataRequest.ServicePoint;

            // ...
        }
}
...