Как получить номер локального порта запроса HttpWebRequest?

Я делаю длительный запрос с HttpWebRequest асинхронно. Во время выполнения запроса я хотел бы иметь возможность получить локальный порт запроса (т. Е. Тот, который находится на клиенте, а не на сервере). Как я могу это сделать?

Я посмотрел на HttpWebRequest.ServicePoint.BindIPEndPointDelegate, но это, кажется, позволяет вызывающей стороне указывать локальный адди / порт. В идеале я хотел бы позволить HttpWebRequest нормально выбирать свой локальный порт, а затем спрашивать, что он выбрал.

1 ответ

К сожалению, HttpWebRequest класс действительно не раскрывает то, что вы просите.

Я не рекомендую то, что скажу ниже, для использования в производстве. Это просто удовольствие программиста.

ServicePoint класс имеет личное NetworkStream член вызвал m_NetworkStream, выставленный через внутреннюю собственность NetworkStream,

Как вы уже знаете, NetworkStream уже выставляет публику Socket свойство, которое дает вам базовый сокет, из которого вы можете получить доступ к локальной конечной точке IP.

Таким образом, единственная задача состоит в том, чтобы получить PropertyInfo за ServicePoint.NetworkStream, получить его значение для конкретного HttpWebRequest экземпляр и оттуда по прямой линии.

Примечание. Для правильного решения вы можете взглянуть на службы HTTP HTTP Windows, а затем, возможно, создать вокруг него управляемую оболочку (если ее еще нет).

Наслаждайтесь!

Другие вопросы по тегам