2016-02-29 38 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平台上执行此操作。

相关问题