добавить ссылку на веб-сервис из-за прокси-сервера

Я использую вс2010. В простом консольном приложении я пытаюсь добавить ссылку на http://***/service1.asmx старую службу asmx. Мой компьютер находится за прокси-сервером, поэтому я получаю сообщение об ошибке:

«Удаленный сервер вернул неожиданный ответ: (407) Требуется проверка подлинности прокси».

Когда я использую инструмент wsdl, я не могу определить номер порта прокси-сервера, и я получаю сообщение о том, что сервер, например 10.0.0.3:80, не ответил, но мне нужно указать порт 8080, и я не знаю, как это сделать. Как я могу создать ссылку?


person Nikita    schedule 12.09.2011    source источник


Ответы (4)


Взгляните на приведенные ниже ссылки для указания адреса прокси и порта сервера при добавлении веб-ссылки.

http://msdn.microsoft.com/en-us/library/bb628649.aspx

http://msdn.microsoft.com/en-us/library/03seed2h.aspx

Чтобы добавить ссылку на asmx

  1. Щелкните правой кнопкой мыши консольное приложение и выберите добавить ссылку на службу.

  2. Нажмите кнопку «Дополнительно» и введите адрес asmx в адресной строке. Нажмите на зеленую кнопку рядом с ним, чтобы открыть файл asmx.

  3. Дайте ему имя и нажмите «Добавить ссылку».

Обновление: попробуйте обновить веб-конфигурацию/конфигурацию приложения и добавить;

<system.net>

<defaultProxy>
<proxy usesystemdefault="True" proxyaddress="http://[your proxy address and port number]"  bypassonlocal="True"/>

</defaultProxy>

</system.net>
person WooHoo    schedule 12.09.2011
comment
когда я это делаю, я получаю сообщение об ошибке. Операция недействительна из-за текущего состояния объекта. - person Nikita; 12.09.2011
comment
Я попытался добавить эти настройки в app.config, и ошибка все еще возникает. Когда я добавляю веб-ссылку, я вижу описание сервиса. У меня есть гиперссылки на 2 метода обслуживания. Также я настраиваю параметры IE для прокси. - person Nikita; 12.09.2011
comment
это всего лишь предположение, но попробуйте https, а не http при добавлении asmx. - person WooHoo; 12.09.2011
comment
при использовании https я получаю Эта программа не может отображать страницу веб-страницы в окне Добавить веб-ссылку - person Nikita; 12.09.2011
comment
Да, я пытался это сделать, но не получилось, и я не знаю, что еще попробовать настроить, чтобы это работало автоматически. знак равно - person Nikita; 15.09.2011

Я потратил почти 50 часов на поиск проблемы, нигде в сети не смог найти это простое решение.

В разделе «Конфигурация» в Web.config добавьте следующее:

  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true"></defaultProxy>
</system.net>

Тогда работает как шарм!

Вы также можете сделать это из кода:

serviceConnection = new WebService1();
serviceConnection.Proxy = System.Net.HttpWebRequest.GetSystemWebProxy();
serviceConnection.Proxy.Credentials = CredentialCache.DefaultCredentials; 

Красиво работает!!.

Если вам нужно использовать из местоположения HTTPS, добавьте эту конфигурацию:

<message clientCredentialType="Certificate" algorithmSuite="Default" />
person Israel Margulies    schedule 06.11.2012
comment
К какому классу принадлежит член serviceConnection.Proxy? - person Tanner Swett; 15.06.2016
comment
Идеальное решение, на самом деле я хотел избежать настроек прокси по умолчанию, я скопировал вашу идею и отключил прокси в конфиге ‹system.net› ‹defaultProxy enabled=false useDefaultCredentials=true› ‹/defaultProxy› ‹/system.net› - person N Khan; 15.11.2017

Добавление ссылки:

Убедитесь, что вы добавляете ссылку следующим образом. Вам нужно нажать на "Add Service Reference", перейти на "Advanced" и, наконец, нажать на "Add Web Reference".

Затем добавьте следующее:

http://***/service1.asmx

Для port 8080 вы используете:

http://***:8080/service1.asmx

Настройте прокси для вашей веб-службы:

Чтобы убедиться, что веб-служба использует ваш Internet Explorer proxy, вы можете добавить следующее к вашему объекту Web Service в клиентском приложении.

webService1.Proxy = WebRequest.GetSystemWebProxy();

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

webService1.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/");

NTLM

Если вы используете NTLM, вам, вероятно, потребуется убедиться, что вы также используете учетные данные по умолчанию в своем клиентском проекте. Вы можете легко сделать это, передав его при создании веб-службы, используя UseDefaultCredentials, установленный на true.

public webService _webService = new webService() { UseDefaultCredentials = true };

Вы также можете отключить аутентификацию NTLM для своего проекта веб-службы. Вы можете сделать это под Project Properties -> Web. Если вы снимите этот флажок, вы сможете добавить веб-службу без аутентификации.

http://msdn.microsoft.com/en-us/library/aa378749.aspx

person eandersson    schedule 12.09.2011
comment
upd: веб-сервис, который я пытаюсь использовать в своем консольном приложении, получил анонимную аутентификацию. В моем консольном приложении я не могу найти Project Properties -> Web. - person Nikita; 12.09.2011
comment
Это будет под вашей веб-службой, а не под клиентом. - person eandersson; 12.09.2011
comment
Вы также можете отключить аутентификацию NTLM для своего проекта веб-службы. Вы можете сделать это в разделе Свойства проекта -> Веб. Если вы снимите этот флажок, вы сможете добавить веб-службу без аутентификации. - КАК я упоминал ранее, веб-сервис имеет анонимную аутентификацию. Поэтому я могу открыть страницу веб-сервиса через свой браузер. Когда я открываю сервисный uri с помощью браузера, он (браузер) показывает мне окно для ввода имени пользователя и пароля. Я предоставляю только учетные данные прокси-сервера. - person Nikita; 12.09.2011
comment
Вы пытались добавить для set UseDefaultCredentials значение true? Если это не сработает, вы можете попробовать установить прокси-сервер на прокси-сервер IE по умолчанию: _webService.Proxy = WebRequest.GetSystemWebProxy(); - person eandersson; 12.09.2011
comment
Вы также можете установить параметры прокси вручную следующим образом: _webService.Proxy = new WebProxy("hxxp://my-proxy-settings:8080/"); - person eandersson; 12.09.2011

Я не могу автоматически создать ссылку на веб-службу с помощью vs2010. Я решаю использовать инструмент wsdl.exe и в параметре с именем /parameters передаю xml-файл с учетными данными прокси-сервера.

wsdl.exe http://service uri/service1.asmx /parameters:c:\temp\wsdlparameters.xml

WSDL.exe создает файл Service1.cs (по умолчанию). Я добавляю этот файл в свой проект и использую его следующим образом:

WebProxy wp = new WebProxy(@"YourProxyServer",ProxyPort);
wp.Credentials = new NetworkCredential("USERNAME", "PASSWORD");
Service1 service1 = new Service1();
service1.Proxy = wp;
service1."YourServiceMethod"();
person Nikita    schedule 13.09.2011
comment
Рад, что ты добрался туда в конце концов. - person WooHoo; 13.09.2011
comment
Вы смотрели мой последний комментарий? Он должен сделать это автоматически на основе ваших настроек IE. - person eandersson; 13.09.2011
comment
я не знаю, что еще настроить, чтобы он работал автоматически. Возможно, наш прокси блокирует какой-то трафик, но я думаю, что http достаточно, чтобы добавить ссылку. - person Nikita; 16.09.2011