我想爲我需要的某些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)
顯然,這是不可能的,但在一個理想的世界,我可以以某種方式訪問底層的Socket這樣的:
client.Socket.Bind(new IPEndPoint(167772161, 80));
有沒有辦法做到這一點,而無需編寫一個完整的HTTP客戶端?
這裏有更多的背景說明爲什麼我試圖做到這一點,以防有人有不同的解決方案在一起。我們有一個擁有多臺機器的網絡農場,每臺機器都使用一個具有多個IP地址的網卡(全部位於同一網關)。我們希望每個應用程序都使用它自己的IP地址作爲外部請求。
下面是一個簡化的版本:
- 機1
- 應用1(10.0.1.10/255.255.0.0)
- 應用2(10.0.1.11/255.255.0.0)
- 等。
- 機2
- 應用1(10.0.2.10/255.255.0.0)
- 應用2(10.0.2.11/255.255.0.0)
- 等...
- 等...
流量從172.16.0.2(應用1外部)路由到10.0.x.10(應用1內部),從172.16.0.3(應用2外部)到10.0.x.11(應用2內部)等等。我們是試圖通過使用172.16.0.2(app 1 external)來避免來自app 2的外部請求,因爲它使用10.0.x.10作爲本地地址而不是10.0.x.11。簡化的例子
快速的網絡圖,在情況下幫助所有:
你的問題不太清楚。您正在向某個網址發送HTTP請求 - 該網址中已經有了該IP地址。我不太清楚服務器和客戶應該在哪裏。另外,你怎麼能有一個單一的網卡有很多不同的IP地址? – Luaan 2014-10-07 13:38:49
這是目標IP地址。我正在嘗試更改源IP地址。您可以在NIC的高級TCP/IP設置中添加更多IP地址。 – 2014-10-07 13:47:12
我100%確定我有多個IP地址。這裏有一個問題,解釋如何你可以做到這一點,如果你有興趣:http://serverfault.com/questions/868/multiple-ip-addresses-per-nic – 2014-10-07 14:03:27