我正在使用 HttpWebRequest 异步发出长时间运行的请求。在请求运行时,我希望能够获取请求的本地端口(即客户端上的端口,而不是服务器上的端口)。我怎么做?
我查看了 HttpWebRequest.ServicePoint.BindIPEndPointDelegate,但这似乎只允许调用者指定本地 addy/port。理想情况下,我想让 HttpWebRequest 正常选择其本地端口,然后询问它选择了什么。
我正在使用 HttpWebRequest 异步发出长时间运行的请求。在请求运行时,我希望能够获取请求的本地端口(即客户端上的端口,而不是服务器上的端口)。我怎么做?
我查看了 HttpWebRequest.ServicePoint.BindIPEndPointDelegate,但这似乎只允许调用者指定本地 addy/port。理想情况下,我想让 HttpWebRequest 正常选择其本地端口,然后询问它选择了什么。
不幸的是,这HttpWebRequest
门课真的没有暴露你的要求。
我不建议在生产中使用我将在下面说的内容。这只是程序员的乐趣。
该类ServicePoint
有一个NetworkStream
名为的私有成员m_NetworkStream
,通过内部属性公开NetworkStream
。
您可能已经知道,NetworkStream
已经公开了一个公共Socket
属性,它为您提供了底层套接字,您可以从中访问本地 IP 端点。
因此,唯一的挑战是获取PropertyInfo
for ServicePoint.NetworkStream
,获取特定HttpWebRequest
实例的值,然后从那里开始它是一条直线。
注意:对于正确的解决方案,您可能需要查看Windows HTTP 服务,然后可能围绕它创建一个托管包装器(如果还没有的话)。
享受!