我正在用的HttpWebRequest异步长时间运行的请求。 当请求正在运行,我希望能够获得请求的本地端口(即,一个在客户端上,而不是服务器)。 我怎么做?
我已经看了HttpWebRequest.ServicePoint.BindIPEndPointDelegate,但这似乎只是允许呼叫者指定本地阿迪/端口。 理想情况下,我想,让HttpWebRequest的正常挑它的本地端口,然后问它是什么选择。
我正在用的HttpWebRequest异步长时间运行的请求。 当请求正在运行,我希望能够获得请求的本地端口(即,一个在客户端上,而不是服务器)。 我怎么做?
我已经看了HttpWebRequest.ServicePoint.BindIPEndPointDelegate,但这似乎只是允许呼叫者指定本地阿迪/端口。 理想情况下,我想,让HttpWebRequest的正常挑它的本地端口,然后问它是什么选择。
不幸的是, HttpWebRequest
类确实没有揭露你所要求的东西。
我不建议我将在下面说,在生产中使用。 这只是程序员的乐趣 。
该ServicePoint
类有一个私人NetworkStream
称为成员m_NetworkStream
,通过内部属性暴露NetworkStream
。
正如你可能已经知道, NetworkStream
已经暴露了公共Socket
,让你潜在的插座,从中可以访问本地IP端点属性。
因此,唯一的挑战是如何获得PropertyInfo
为ServicePoint.NetworkStream
,得到其数值为特定HttpWebRequest
实例,并从那里它是一条直线。
注意:对于一个妥善的解决办法,你可能想看看Windows HTTP服务 ,然后也许创建它周围的托管包装(如果没有的话)。
请享用!