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