2016-02-29 102 views
0

我正在使用三部分通過HTTP進行通信的系統。這些部分是Service,ServiceRegistry和Client。 Service和ServiceRegistry是自託管的OWIN應用程序。客戶的性質並不重要。當請求者在本地計算機上時,從OWIN中的請求者獲取可路由的IPV6地址

在我的設計中,服務POST S到ServiceRegistry以「註冊」本身。所述ServiceRegistry讀取Request.GetOwinContext().Request.RemoteIpAddress以確定服務所在並GET發回給服務執行一些握手(端口此GET在原始POST被供給)。最後,客戶端出現並向ServiceRegistry執行一個GET,詢問服務的位置,並接收它可以直接與服務交互的IP地址和端口。

當所有三個部件都在不同的機器上運行時,此功能很好。

然而,當配置的是,服務和的ServiceManager是在MACHINE01運行,並且客戶端上運行MACHINE02系統出現故障。看起來正在發生的是(當兩個部分位於同一臺機器上時)RemoteIpAddress收到IPV6地址的鏈路本地版本。我從IPV6地址剝離Scope ID並將地址和端口返回給客戶端。但是,對於在另一臺機器上運行的客戶端,這是一個無法訪問的地址。

任何人都可以建議我怎麼能以這樣的方式讀取來自OWIN請求遠程IP地址,這將是從其他機器訪問我的網絡上?

回答

1

當你與任何地址連接,我不認爲有一種方式來獲得對方的其他地址。

您可以實現並使用鏈接區域設置地址和全局地址之間的一些地址映射註冊表。 (總是希望對方接受其全球地址的請求也是如此。)

或者,如果你有機會獲得它我會建議修改請求對等端發送其全球地址發起請求。這通常可以通過源地址選擇來實現。但我不知道在Unix平臺上如何在.NET平臺上執行此操作。

相關問題