[.NET] VPS + N-ое кол-во IP

Vodnik

Есть VPS под Windows. Есть N-ое кол-во IP привязанных к VPS.
Как можно делать запросы с сервера с разных IP по выбору?

katrin2201

Зависит от того, что за запросы, и чем они делаются.

Vodnik

HTTP запросы, делаются из .NET

klyv

ня

Vodnik

круто, но теперь такой вопрос. ServicePoint общий для всех HttpWebRequest. То есть сделать одновременно два запроса с разных айпи не получается. Это как то решается?

Helga87

Это как то решается?
да, это решается.

Vodnik

?

Helga87

!

Helga87

ну а по делу: ты уже пробовал искать в инете (так ты можешь найти одно из известных мне решений)? или пробовал подумать (тогда найдется второе решение)?

Vodnik

пробовал искать - не нашел, пробовал думать - пока в голове только написать прокси сервер.

Helga87

ServicePoint objects are managed by the ServicePointManager class and are created, if necessary, by the ServicePointManager.FindServicePoint method. ServicePoint objects are never created directly but are always created and managed by the ServicePointManager class.
Вот эту фразу в документации видел? Что следует из этой фразы?

Vodnik

блин, что за квест?
нужно как то подменить ServicePoint? как?

Helga87

нужно как то подменить ServicePoint? как?
тот кусок документации, который я привел точно говорит, что только через ServicePointManager. Смотрим ServicePointManager. Вот это читал?
When an application requests a connection to an Internet resource Uniform Resource Identifier (URI) through the ServicePointManager object, the ServicePointManager returns a ServicePoint object that contains connection information for the host and scheme identified by the URI. If there is an existing ServicePoint object for that host and scheme, the ServicePointManager object returns the existing ServicePoint object; otherwise, the ServicePointManager object creates a new ServicePoint object.
Т.е. как только ServicePointManager создал ServicePoint, все — будет отдавать этот ServicePoint.
Что из этого следует?

Vodnik

нужно удалить его после использования?

Vodnik

покопался еще раз в инете - предлагают сделать стек айпишников и брать оттуда по мере надобности, но мне это не подходит, мне нужно сделать конкретный запрос через конкретный айпи.
если у тебя есть решение - будь добр, напиши

Helga87

Ну блин, это же очевидно. Если ты не можешь влиять на ServicePointManager, ты можешь сделать много ServicePointManager-ов. Поскольку это static class, то в одном AppDomain может существовать только один ServicePointManager. Значит, тебе надо делать запрос в другом AppDomain (пофиг, тот же процесс или другой).
Еще раз кратенько: или создаешь для каждого запроса процесс, или AppDomain.
Если не нравится этот способ, у меня есть еще целых два. Один с P/Invoke WinInet (сам пользовался для advanced http штук, которые не поддерживаются стандартной оберткой). Другой — хакерский способ с reflection, чтобы поменять private members в ServicePointManager.
Т.е. целых три способа решения в одном посте!

Vodnik

ух ты, нифига себе, про AppDomain не знал, спасибо!
ну про два других тоже не знал...
Оставить комментарий
Имя или ник:
Комментарий: