WCF 取得客户端IP

        在公司的一个项目里面,使用WCF做通讯,里面需要取得使用WCF做客户端的IP,在服务器上做进一步的处理,但是让人很失望的是WCF 3.0 里面并不能支持这个功能。
        还好,微软在3.5的新版WCF中提供了这个方法。
        
        不说废话,直接看如何实现。
        简单定义一个服务:
         
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace ClientInfoSample
{
    [ServiceContract]
    
public interface IService
    
{
        [OperationContract]
        
string GetData(string value);
    }

}



在建立通道之后按照可以取得:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Channels; 

namespace ClientInfoSample
{
    
public class MyService : IService
    
{
        
public string GetData(string value)
        
{
            OperationContext context 
= OperationContext.Current;
            MessageProperties essageProperties 
= context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpointProperty 
=
            messageProperties  [RemoteEndpointMessageProperty.Name]
                
as RemoteEndpointMessageProperty;

            
return string.Format("Hello {0}! Your IP address is {1} and your port is {2}",  value, endpointProperty.Address, endpointProperty.Port);
        }

    }

}



config:
<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  
<system.web>

    
<compilation debug="true" />

  
</system.web>

  
<system.serviceModel>

    
<services>

      
<service name="ClientInfoSample.MyService" behaviorConfiguration="ClientInfoSample.MyServiceBehavior">

        
<host>

          
<baseAddresses>

            
<add baseAddress = "http://localhost:8731/Design_Time_Addresses/ClientInfoSample/MyService/" />

          
</baseAddresses>

        
</host>

        
<endpoint address ="" binding="wsHttpBinding" contract="ClientInfoSample.IService">

          
<identity>

            
<dns value="localhost"/>

          
</identity>

        
</endpoint>

        
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

      
</service>

    
</services>

    
<behaviors>

      
<serviceBehaviors>

        
<behavior name="ClientInfoSample.MyServiceBehavior">

          
<serviceMetadata httpGetEnabled="True"/>

          
<serviceDebug includeExceptionDetailInFaults="False" />

        
</behavior>

      
</serviceBehaviors>

    
</behaviors>

  
</system.serviceModel>

</configuration>


例子内容缘自:
http://nayyeri.net/blog/detect-client-ip-in-wcf-3-5/
        
posted @ 2008-06-03 14:10  Boy Xie  阅读(5360)  评论(8编辑  收藏  举报