如何在ASP.NET中查找Web服务调用者的端口号?

时间:2009-07-01 21:17:41

标签: asp.net web-services sockets tcp

我有一个在IIS上运行的Web服务(6或7,无所谓),我想知道调用者从其发送请求/调用的端口。

因此,如果客户在我的网络服务上拨打电话,我如何从服务器端找出他们拨打电话的端口号是什么?

甚至在最低级别甚至会传递一些东西?为了清楚起见我不是在寻找用于回调目的的端口。它只用于记录。

4 个答案:

答案 0 :(得分:0)

如果您的服务是在WCF上,那么:

OperationContext context = OperationContext.Current;

MessageProperties messageProperties = context.IncomingMessageProperties;

var endpointProperty = messageProperties[RemoteEndpointMessageProperty.Name] 
                       as RemoteEndpointMessageProperty;
if (endpointProperty != null)
{
    string sRemoteAddress = endpointProperty.Address;
    int nRemotePort = endpointProperty.Port;
}

答案 1 :(得分:0)

TCP套接字确实具有发送方端口号的概念,但它在应用程序级协议中没有多大用处。也就是说,考虑到OP的最后一段,我认为你正在寻找回调客户端的方法。我之前说的端口不能用于此。异步请求与在单独的线程上运行的同步请求相同,没有什么特别之处。

答案 2 :(得分:0)

您应该能够在Server对象的服务器变量中找到它“REMOTE_PORT”。

但是,此端口几乎总是随机的,并且仅对客户端正在进行的请求/响应对有效。它应该不能用于异步回调。在呼叫其他服务时,即使您的Web服务也会使用随机端口号来发起请求。通信中唯一的静态端口是TCP连接服务器端的接收端口。

答案 3 :(得分:0)

某些网络地址转换类型的设备会隐藏您的实际“发送”端口号。然后,您将可以访问无用的IP地址和无用的端口号。