#c# #web-services #proxy
Вопрос:
Мне нужно настроить веб-сайт для доступа к веб-сервису на другой машине через прокси-сервер. Я могу настроить веб-сайт на использование прокси-сервера, но я не могу найти способ указать учетные данные, необходимые для прокси-сервера, возможно ли это? Вот моя текущая конфигурация:
<defaultProxy useDefaultCredentials="false">
<proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>
Я знаю, что вы можете сделать это с помощью кода, но программное обеспечение, на котором работает веб-сайт, является CMS с закрытым исходным кодом, поэтому я не могу этого сделать.
Есть ли какой-нибудь способ сделать это? MSDN мне не очень помогает..
Ответ №1:
Да, вы можете указать свои собственные учетные данные без изменения текущего кода. Однако для этого требуется небольшой фрагмент кода с вашей стороны.
Создайте сборку под названием SomeAssembly.dll с этим классом :
namespace SomeNameSpace
{
public class MyProxy : IWebProxy
{
public ICredentials Credentials
{
get { return new NetworkCredential("user", "password"); }
//or get { return new NetworkCredential("user", "password","domain"); }
set { }
}
public Uri GetProxy(Uri destination)
{
return new Uri("http://my.proxy:8080");
}
public bool IsBypassed(Uri host)
{
return false;
}
}
}
Добавьте это в свой конфигурационный файл :
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type = "SomeNameSpace.MyProxy, SomeAssembly" />
</defaultProxy>
Это «вводит» новый прокси-сервер в список, и поскольку учетные данные по умолчанию отсутствуют, класс WebRequest сначала вызовет ваш код и запросит ваши собственные учетные данные. Вам нужно будет разместить сборку некоторого узла в каталоге bin вашего приложения CMS.
Это в некотором роде статический код, и для получения всех строк, таких как пользователь, пароль и URL-адрес, вам может потребоваться либо реализовать свой собственный раздел конфигурации, либо добавить некоторую информацию в настройки приложений, что гораздо проще.
Комментарии:
1. Я собираюсь отметить это как ответ, потому что похоже, что это должно сработать, но у меня все еще возникают проблемы с подключением, которые, похоже, больше всего связаны с ISA Server..
2. Мы не должны делать 1 и т. Д., Но это действительно простое и элегантное решение!!
3. Есть идеи, как передать учетные данные ассамблее? Я не хочу жестко кодировать эту информацию, так как пользователи должны иметь возможность изменять ее позже, не перекомпилируя код.
Ответ №2:
Хотя я не нашел хорошего способа указать учетные данные прокси-сервера в web.config, вы можете обнаружить, что все еще можете использовать некодирующее решение, включив его в свой web.config:
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
</defaultProxy>
</system.net>
Ключевым элементом в этом процессе является изменение параметров IIS, гарантирующее, что учетная запись, запускающая процесс, имеет доступ к прокси-серверу.
Если ваш процесс выполняется под управлением LocalService или NetworkService, то это, вероятно, не сработает. Скорее всего, вам понадобится учетная запись домена.
Ответ №3:
Вы можете указать учетные данные, добавив новые общие учетные данные вашего прокси-сервера в Диспетчере учетных данных Windows:
1 В Web.config
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
- В Панели управленияВсе элементы панели управленияДиспетчер учетных данных >>> Добавьте общие учетные данные
Интернет или сетевой адрес: ваш прокси-адрес
Имя пользователя: ваше имя пользователя
Пароль: вы передаете
Эта конфигурация работала для меня, без изменения кода.
Комментарии:
1. Панель управленияВсе элементы Панели управленияДиспетчер учетных данных
2. Работает для меня за прокси-сервером Microsoft ISA
Ответ №4:
Для этой цели можно использовать службы каталогов/поиск LDAP. Это предполагает некоторые изменения на уровне инфраструктуры, но в большинстве производственных сред такое предусмотрено
Комментарии:
1. Я понятия не имею, как это могло бы помочь. Серверы находятся не в одном домене, если это имеет значение..