進行WCF地址代碼進行說明
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);
- }
- }