進(jìn)行WCF地址代碼進(jìn)行說(shuō)明
WCF地址能否獲取客戶端地址IP信息,好多人都遇到過(guò),我們傳統(tǒng)的機(jī)遇的網(wǎng)絡(luò)應(yīng)用和 Web Service都提供了獲取客戶端地址的信息的實(shí)現(xiàn)機(jī)制。下面進(jìn)行介紹說(shuō)明。
WCF地址主要使用是.NET3.5里的服務(wù)端上下文的消息實(shí)例的RemoteEndpointMessageProperty屬性,獲取客戶端地址信息。但是限制的綁定是HTTP、TCP相關(guān)的綁定協(xié)議。網(wǎng)絡(luò)通信的底層機(jī)制來(lái)說(shuō),數(shù)據(jù)包如果經(jīng)由TCP傳輸,IP數(shù)據(jù)包應(yīng)該包含地址和端口信息,WCF地址這個(gè)我們網(wǎng)絡(luò)編程也可以理解。但是WCF獲取客戶端地址信息早期卻沒提供相應(yīng)的實(shí)現(xiàn)。其實(shí)按照道理來(lái)說(shuō)沒什么難度。只是多做個(gè)數(shù)據(jù)包的解析工作,然后把地址信息包裝即可。#t#
WCF地址示例代碼:
這里給出服務(wù)端獲取客戶端IP地址信息的示例代碼分析和實(shí)現(xiàn)過(guò)程,這里的測(cè)試主要是針對(duì)HTTP、TCP相關(guān)的協(xié)議做了4個(gè)測(cè)試。NamePipeBinding等協(xié)議不做測(cè)試了,本地協(xié)議不需要IP和端口。我們主要測(cè)試的是幾個(gè)主要的協(xié)議,來(lái)驗(yàn)證以上的結(jié)論。
服務(wù)端:
主要是對(duì)RemoteEndpointMessageProperty屬性的使用來(lái)獲取地址、端口信息。WCF地址具體代碼如下:
- 服務(wù)契約
- [ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
- public interface IWCFService
- {
- //操作契約
- [OperationContract]
- string SayHelloToUser(string name);
- }
- //服務(wù)類,繼承接口。實(shí)現(xiàn)服務(wù)契約定義的操作
- public class WCFService : IWCFService
- {
- //實(shí)現(xiàn)接口定義的方法
- public string SayHelloToUser(string name)
- {
- //提供方法執(zhí)行的上下文環(huán)境
- OperationContext context = OperationContext.Current;
- //獲取傳進(jìn)的消息屬性
- MessageProperties properties = context.IncomingMessageProperties;
- //獲取消息發(fā)送的遠(yuǎn)程終結(jié)點(diǎn)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);
- }
- }