добавить ссылку на веб-сервис из-за прокси-сервера - PullRequest
9 голосов
/ 12 сентября 2011

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

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

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

Ответы [ 4 ]

27 голосов
/ 06 ноября 2012

Я потратил почти 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" />
7 голосов
/ 12 сентября 2011

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

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>
3 голосов
/ 12 сентября 2011

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

Убедитесь, что вы добавляете ссылку, как это. Вам нужно нажать «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, вам, вероятно, потребуется убедиться, что вы также используете учетные данные по умолчанию в своем клиентском проекте. Вы можете легко сделать это, передав его при создании Web Serivce, используя UseDefaultCredentials, установленное в true.

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

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

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

2 голосов
/ 13 сентября 2011

Я не могу автоматически создать ссылку на веб-сервис, используя vs2010. Я решил использовать утилиту wsdl.exe, и в параметре named / 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"();
...