我正在研究一个有三个部分通过HTTP进行通信的系统。部分是服务,ServiceRegistry和客户端。 Service和ServiceRegistry是自托管的OWIN应用程序。客户的性质无关紧要。
在我的设计中,服务POST
向ServiceRegistry“注册”自己。 ServiceRegistry读取Request.GetOwinContext().Request.RemoteIpAddress
以确定服务所在的位置,并GET
返回服务以执行一些握手(原始GET
中提供了此POST
的端口)。最后,客户端出现并向ServiceRegistry执行GET
,询问服务的位置,并接收可直接与服务进行交互的IP地址和端口。
当所有三个部件在不同的机器上运行时,这很有效。
但是,当配置是Service和ServiceManager在MACHINE01上运行且客户端在MACHINE02上运行时,系统将失败。似乎正在发生的事情是(当两个部分都位于一台机器上时)RemoteIpAddress
收到IPV6地址的链接本地版本。我从IPV6地址中剥离Scope ID并将地址和端口返回给客户端。但是,对于在不同计算机上运行的客户端,这是一个无法访问的地址。
有人可以建议我如何从OWIN请求中读取远程IP地址,以便可以从我网络上的其他计算机访问它吗?
答案 0 :(得分:1)
当您与任何地址相关联时,我认为没有办法获取同伴的其他地址。
您可以在链接区域设置地址和全局地址之间实现和使用一些地址映射注册表。 (总是希望同伴也接受其全球地址的请求。)
或者如果您有权访问它,我建议修改请求对等方以发送源自其全局地址的请求。这通常可以通过源地址选择来实现。但我不知道你是如何在.NET平台上这样做的,因为我在Unix系统上工作。