25

有没有办法获取 WCF 连接的远程 IP 地址?

我猜它没有内置到 WCF 框架中的原因是 WCF 可以使用非 TCP/IP 绑定,因此 IP 地址并不总是有意义的。

然而,这些信息对于所有广泛使用的绑定都是有意义的(据我所知:BasicHttp、DualHttp、WSHttp 和 NetTcp)。

IP 地址可能可以使用反射访问,但我宁愿找到一种记录的方式来获取它,而不是侵入框架类。

我已经用谷歌搜索了这个问题,似乎很多人在没有找到合适的解决方案的情况下遇到了它(通常的答案是依赖消息头,但这意味着信任客户端提供其真实的 IP 地址,这如果您出于安全原因要记录 IP 地址,则不是一个选项)

4

3 回答 3

15

显然它已通过RemoteEndpointMessageProperty在 3.5 中添加;看这里

于 2008-12-24T10:54:08.440 回答
5
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string address = endpoint.Address;
于 2014-03-29T14:06:37.027 回答
2

如果您在服务端并想要获取客户端 IP,则必须检查 OperationContext 的消息属性。例如看这里这里

于 2008-12-24T10:02:08.777 回答