(.NET) ServicePoint.IPEndPointDelegate не выполняет обратный вызов через прокси?

Мне нужно привязать локальный IP-адрес для HttpWebRequest (у машины несколько IP-адресов). Я создаю метод делегата, и он вызывается, и IP-адрес привязан для запросов без прокси, но как только я добавляю данные прокси в запрос, обратный вызов никогда не происходит

Как я могу привязать исходящий IP-адрес для HttpWebRequests, использующих прокси?

    static void MakeRequest(string url, WebProxy myProxy)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
        request.Proxy = myProxy;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    }
    public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
    {
        // not called when proxy is set
        Console.WriteLine("BindIPEndpoint called");
        return new IPEndPoint(IPAddress.Parse("192.168.1.58"), 5000);
    } 

Есть ли другой способ привязать это к https?


person staff0rd    schedule 05.03.2010    source источник


Ответы (1)


Чтобы привязать запрос, использующий прокси, используйте ServicePointManager.FindServicePoint;

static void MakeRequest(string url, WebProxy myProxy)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Proxy = myProxy;
    ServicePoint sp = ServicePointManager.FindServicePoint(new Uri(url), myProxy);
    sp.BindIpEndPointDelegate = new BindIpEndPoint(BindIpEndPointCallback);
    HttpWebResponse = (HttpWebResponse)request.GetResponse();
}

Работает для http-запросов, к сожалению, делегат все еще не вызывается на https-запросы.

person staff0rd    schedule 10.03.2010
comment
Большое спасибо! Это настолько нелогично, что это не работает с помощью ServicePoint запроса. Однако, используя ваш метод, я наконец смог использовать дополнительный адаптер WLAN для прямого подключения к Интернету, в то время как для моего основного адаптера LAN требуется прокси. - person Daniel Albuschat; 24.08.2012