如何获取HttpWebRequest的本地端口号?

时间:2012-06-26 16:36:58

标签: c# .net httpwebrequest httpwebresponse

我正在异步地使用HttpWebRequest进行长时间运行的请求。请求正在运行时,我希望能够获取请求的本地端口(即客户端上的端口,而不是服务器端口)。我怎么做?

我查看了HttpWebRequest.ServicePoint.BindIPEndPointDelegate,但这似乎只允许调用者指定本地addy / port。理想情况下,我想允许HttpWebRequest正常选择其本地端口,然后询问它选择了什么。

1 个答案:

答案 0 :(得分:0)

不幸的是,HttpWebRequest类确实没有暴露你要求的东西。

我不推荐下面我要说的用于制作。这是程序员的乐趣

ServicePoint类有一个名为m_NetworkStream的私人NetworkStream成员,通过内部属性NetworkStream公开。

正如您可能已经知道的那样,NetworkStream已经公开了一个公共Socket属性,该属性为您提供了底层套接字,您可以从中访问本地IP端点。

所以唯一的挑战是获取PropertyInfo的{​​{1}},获取特定ServicePoint.NetworkStream实例的值,并从那里开始直线。

注意:要获得正确的解决方案,您可能需要查看Windows HTTP Services,然后围绕它创建一个托管包装器(如果还没有)。

享受!