Как получить номер локального порта запроса HttpWebRequest?
Я делаю длительный запрос с HttpWebRequest асинхронно. Во время выполнения запроса я хотел бы иметь возможность получить локальный порт запроса (т. Е. Тот, который находится на клиенте, а не на сервере). Как я могу это сделать?
Я посмотрел на HttpWebRequest.ServicePoint.BindIPEndPointDelegate, но это, кажется, позволяет вызывающей стороне указывать локальный адди / порт. В идеале я хотел бы позволить HttpWebRequest нормально выбирать свой локальный порт, а затем спрашивать, что он выбрал.
1 ответ
К сожалению, HttpWebRequest
класс действительно не раскрывает то, что вы просите.
Я не рекомендую то, что скажу ниже, для использования в производстве. Это просто удовольствие программиста.
ServicePoint
класс имеет личное NetworkStream
член вызвал m_NetworkStream
, выставленный через внутреннюю собственность NetworkStream
,
Как вы уже знаете, NetworkStream
уже выставляет публику Socket
свойство, которое дает вам базовый сокет, из которого вы можете получить доступ к локальной конечной точке IP.
Таким образом, единственная задача состоит в том, чтобы получить PropertyInfo
за ServicePoint.NetworkStream
, получить его значение для конкретного HttpWebRequest
экземпляр и оттуда по прямой линии.
Примечание. Для правильного решения вы можете взглянуть на службы HTTP HTTP Windows, а затем, возможно, создать вокруг него управляемую оболочку (если ее еще нет).
Наслаждайтесь!