4

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

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

4

1 回答 1

0

不幸的是,这HttpWebRequest门课真的没有暴露你的要求。

我不建议在生产中使用我将在下面说的内容。这只是程序员的乐趣

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

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

因此,唯一的挑战是获取PropertyInfofor ServicePoint.NetworkStream,获取特定HttpWebRequest实例的值,然后从那里开始它是一条直线。

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

享受!

于 2012-06-26T17:12:26.683 回答