以前刚学习WCF时记得只能获得客户端内网IP,现在忘记了,不知道怎么获取。
IPHostEntry v = System.Net.Dns.Resolve(System.Net.Dns.GetHostName());
Console.WriteLine(System.Net.Dns.Resolve(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString());//.Current.Request.UserHostAddress;
string hostName= System.Net.Dns.GetHostName();
IPHostEntry ipHostEntry= System.Net.Dns.GetHostEntry(hostName );
这些获得的是所有内网IP,但多个网卡时,就不知道当前客户端用的那个IP了。
请大家指点!非常感谢!
下面是获得外网IP,以前找了很久都没找到。
//提供方法执行的上下文环境
OperationContext context = OperationContext.Current;
//获取传进的消息属性
MessageProperties properties = context.IncomingMessageProperties;
//获取消息发送的远程终结点IP和端口
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
Console.WriteLine(string.Format("Hello {0},You are from {1}:{2} 内网ip={3}", name, endpoint.Address, endpoint.Port
Try using the following code.
using System.ServiceModel;
using System.ServiceModel.Channels;
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
namespace Sample
{
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Net;
[ServiceContract]
interface IMyService
{
[OperationContract]
public string ProcessUntyped(Message message);
[OperationContract]
public string ProcessTyped(string str);
}
class MyService : IMyService
{
public string ProcessUntyped(Message message)
{
RemoteEndpointMessageProperty endpoint = message.Properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return string.Format("Connected from {0}:{1}", str, endpoint.Address, endpoint.Port);
}
public string ProcessTyped(string str)
{
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return string.Format("You said: '{0}'. Connected from {1}:{2}", str, endpoint.Address, endpoint.Port);
}
}
}
获取客户端IP的代码:
/*************************************************************************************
* 代码:吴蒋
* 时间:2012.02.07
* 说明:安全类
* 其他:
* 修改人:
* 修改时间:
* 修改说明:
************************************************************************************/
using System.ServiceModel;
using System.ServiceModel.Channels;
namespace Tools
{
public class Safe
{
public static Safe Instance()
{
return new Safe();
}
public string ClientIp()
{
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return endpoint.Address;
}
public string ClientPort()
{
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return endpoint.Port.ToString();
}
public string ClientIpAndPort()
{
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return endpoint.Address + ";" + endpoint.Port.ToString();
}
}
}