WCF地址能否获取客户端地址IP信息,好多人都遇到过,我们传统的机遇的网络应用和 Web Service都提供了获取客户端地址的信息的实现机制。下面进行介绍说明。
WCF地址主要使用是.NET3.5里的服务端上下文的消息实例的RemoteEndpointMessageProperty属性,获取客户端地址信息。但是限制的绑定是HTTP、TCP相关的绑定协议。网络通信的底层机制来说,数据包如果经由TCP传输,IP数据包应该包含地址和端口信息,WCF地址这个我们网络编程也可以理解。但是WCF获取客户端地址信息早期却没提供相应的实现。其实按照道理来说没什么难度。只是多做个数据包的解析工作,然后把地址信息包装即可。#t#
WCF地址示例代码:
这里给出服务端获取客户端IP地址信息的示例代码分析和实现过程,这里的测试主要是针对HTTP、TCP相关的协议做了4个测试。NamePipeBinding等协议不做测试了,本地协议不需要IP和端口。我们主要测试的是几个主要的协议,来验证以上的结论。
服务端:
主要是对RemoteEndpointMessageProperty属性的使用来获取地址、端口信息。WCF地址具体代码如下:
- 服务契约
- [ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
- public interface IWCFService
- {
- //操作契约
- [OperationContract]
- string SayHelloToUser(string name);
- }
- //服务类,继承接口。实现服务契约定义的操作
- public class WCFService : IWCFService
- {
- //实现接口定义的方法
- public string SayHelloToUser(string name)
- {
- //提供方法执行的上下文环境
- OperationContext context = OperationContext.Current;
- //获取传进的消息属性
- MessageProperties properties = context.IncomingMessageProperties;
- //获取消息发送的远程终结点IP和端口
- RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
- Console.WriteLine(string.Format("Hello {0},You arefrom {1}:{2}", name, endpoint.Address,endpoint.Port));
- return string.Format("Hello {0},You arefrom {1}:{2}", name, endpoint.Address, endpoint.Port);
- }
- }