Вызов веб-службы из-за прокси-сервера - PullRequest
9 голосов
/ 13 мая 2009

Мне нужно добавить функциональность в приложение (C #), которое будет использовать веб-сервис (сервис XML SOAP).

Теперь это приложение (и в основном) можно использовать в корпоративной среде, в которой установлен прокси-сервер.

Я понимаю, что службы SOAP используют протокол HTTP и, следовательно, должны использовать порт 80, который обычно остается открытым. Правильно ли, что приложение может использовать веб-сервис без какого-либо специального кодирования, или мне потребуется написать специальный код для обнаружения настроек прокси-сервера или других проблем, которые вы видите?

РЕДАКТИРОВАТЬ: веб-сервис является общедоступной услугой в Интернете. Его нет в одной сети.

Ответы [ 6 ]

10 голосов
/ 13 мая 2009

Он будет использовать порт 80 по умолчанию, и вам не нужно будет выполнять дальнейшее кодирование.

Если вам нужен какой-то прокси-сервер, все, что вам нужно сделать, это добавить в ваш web.config следующее:

  <system.net>
    <defaultProxy>
      <proxy  proxyaddress="http://yourproxyserver:80" />
    </defaultProxy>
  </system.net>

Вы также можете сделать это с помощью кода, используя:

WebRequest.DefaultWebProxy = new WebProxy("http://yourproxyserver:80/",true);
8 голосов
/ 16 июля 2012

Вы можете использовать настройки по умолчанию с вашего локального компьютера:

System.Net.ServicePointManager.Expect100Continue = false; 
wsclient.Proxy=  System.Net.HttpWebRequest.GetSystemWebProxy();
wsclient.Proxy.Credentials = CredentialCache.DefaultCredentials;     

и в app.config добавьте эту конфигурацию:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>
  </system.net>
</configuration>
7 голосов
/ 15 мая 2009

OK. Поэтому я провел несколько экспериментов, и оказалось, что нам нужно написать код, чтобы он работал из-за прокси-сервера. (Хотя я бы предпочел лучшее решение)

Таким образом, в действительности все сводится к тому, чтобы запрашивать у пользователя подробности прокси-сервера, а затем настраивать класс прокси-сервера для прокси-сервера, как показано ниже:

var networkCredentials = new NetworkCredential ("username", "password", "domain");
WebProxy myProxy = new WebProxy ("W.X.Y.Z:NN", true) {Credentials = networkCredentials};
var service = new iptocountry { Proxy = myProxy };
string result = service.FindCountryAsString ("A.B.C.D");

Я написал тестовый класс, и он использует IP To Country бесплатный веб-сервис.

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

5 голосов
/ 14 мая 2009

Встроенный код (WebClient, WCF, HttpWebRequest и т. Д.) Использует конфигурацию WinHTTP для получения конфигурации прокси. Поэтому все, что вам нужно сделать, это настроить WinHTTP, чтобы знать о прокси!

В XP это:

proxycfg -u

, который импортирует настройки из настроек прокси IE пользователя (WinInet).

В Vista / etc, вы используете

netsh winhttp

(и некоторые подкоманды, такие как "import")

не проверено, но попробуйте:

netsh winhttp import proxy source=ie

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

0 голосов
/ 13 мая 2009

Пока веб-трафик (порт 80) пропускается, вам не нужно делать ничего особенного. С точки зрения маршрутизатора / прокси-сервера вызовы веб-службы такие же, как и любой другой трафик HTTP.

0 голосов
/ 13 мая 2009

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

...