Я пытаюсь указать локальную конечную точку для некоторых HTTP-запросов, которые мне нужно сделать.Лучший способ указать локальную конечную точку для HTTP-запроса?
Вот упрощенная версия того, что я делаю сейчас:
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.SendAsync(request))
if (response.IsSuccessStatusCode)
result = await response.Content.ReadAsStringAsync();
Я не привязан к System.Net.Http.HttpClient
, и я полностью открыт для использования других классов, как System.Net.HttpWebRequest
, чтобы получить работу.
Это возможно, по крайней мере, теоретически, поскольку Windows и System.Net.Sockets
допускают это с помощью метода Bind
. Source IP address selection on a Multi-Homed Windows Computer, MSDN - Socket Class (System.Net.Sockets)
Очевидно, что это невозможно, но в идеальном мире, я мог какой-то образом получить доступ к основному гнезду так:
client.Socket.Bind(new IPEndPoint(167772161, 80));
Есть ли способ сделать это без написания всего клиента HTTP ?
Вот немного больше информации о том, почему я пытаюсь это сделать, если у кого-то другое решение. У нас есть webfarm с несколькими машинами, каждый из которых использует один сетевой адаптер с несколькими IP-адресами (все на одном шлюзе). Мы хотели бы, чтобы каждое приложение использовало собственный IP-адрес для внешних запросов.
Вот упрощенная версия:
- машина 1
- приложение 1 (10.0.1.10/255.255.0.0)
- App 2 (10.0.1.11/255.255.0.0)
- и т.д ..
- машина 2
- приложение 1 (10.0.2.10/255.255.0.0)
- App 2 (10.0.2.11/255.255.0.0)
- и т.д. ...
- и т.д. ...
Трафик маршрутизируется с 172.16.0.2 (приложение 1 внешнее) до 10.0.x.10 (1 приложение 1), от 172.16.0.3 (приложение 2 внешнего) до 10.0.x.11 (приложение 2 внутри) и т. Д. Мы пытаясь избежать внешних запросов из приложения 2, используя 172.16.0.2 (приложение 1 external), поскольку оно использует 10.0.x.10 в качестве локального адреса вместо 10.0.x.11.
Быстрая сетевая схема упрощенного примера, в случае, который помогает на всех:
Ваш вопрос не совсем ясен. Вы делаете HTTP-запрос на какой-то URL-адрес: у этого URL-адреса уже есть IP-адрес. Я не совсем понимаю, где должны быть серверы и клиенты. Кроме того, как у вас может быть один сетевой адаптер с множеством разных IP-адресов? – Luaan
Это IP-адрес назначения. Я пытаюсь изменить исходный IP-адрес. Вы можете добавить больше IP-адресов в расширенные настройки TCP/IP вашего сетевого адаптера. –
Я на 100% уверен, что у меня несколько IP-адресов. Вот вопрос, который объясняет, как вы можете это сделать, если вам интересно: http://serverfault.com/questions/868/multiple-ip-addresses-per-nic –