Как указать веб-прокси для справки службы? - PullRequest
7 голосов
/ 04 августа 2011

Я нашел простой веб-сервис онлайн на http://chennaiemergency.co.in/sree/s2.php?wsdl, который я могу вызвать через интерфейс SOAP, используя 2 значения с плавающей запятой (1,1), и легко получить ответ в течение 1-2 секунд.Теперь в новом проекте консольного приложения visual studio 2010 я делаю «добавить ссылку на сервис» и предоставляю WSDL.Затем в получающемся клиенте я делаю это:

    ServiceReference1.ChnEmergencyPortTypeClient client = new ChnEmergencyPortTypeClient();
    string hospital = client.hospital(1, 1);

Я получаю исключение тайм-аута через 1 минуту.Я точно отключил брандмауэр.Я использую Windows7x64. Я использую Интернет через прокси-сервер.

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

Теперь в веб-справочной реализации я сделал этинесколько модификаций:

            WebProxy webProxy = new WebProxy("<my proxy server name>", <port>);

            ChnEmergency client = new ChnEmergency();
            client.Timeout = 200000;
            client.Proxy = webProxy;
            string hospital = client.hospital(1, 1);

Но я все еще получаю тайм-аут.Какие-нибудь предложения, где я пропускаю?

Я сделал быстрый тест с прямым (через телефон) внутренним соединением, которое не вовлекает прокси-серверы.И я смог успешно получить доступ.Это указывает на то, что есть ошибка в том, как я предоставляю веб-прокси.Настройка Internet Explorer предполагает, что мои настройки прокси-сервера:

Адрес: abccom Порт: 80

Так что я создаю веб-прокси, как это

WebProxy webProxy = new WebProxy("a.b.c.com", 80);

Теперь я не знаюесли есть какая-то концепция «безопасного http», и я не знаю, как это выяснить.Но быстрая попытка в браузере с http://a.b.c.com и https://a.b.c.com дала разные результаты.В случае "http" я получил этот недействительный URL.В случае «https» ошибка: «Попытка подключения Google Chrome к abccom была отклонена. Возможно, веб-сайт не работает или ваша сеть неправильно настроена» *

Если я использую веб-прокси с https, он говорит «точка обслуживанияДиспетчер не настроен для https "

Я использовал Fiddler, чтобы увидеть действия, и я вижу, что запрос действительно отображается в Fiddler.Но ответа не приходит.Обязательно ли это означает, что запрос проходит?Или запрос может быть заблокирован на более низком уровне (т.е. после того, как он пройдет через фиддлер).

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Что ж, получается, что прокси, который я использовал, proxyA, был перенаправлен через другой прокси, proxyB.Использование proxyB напрямую решило проблему.Я был проинформирован об этом кем-то другим, сам не понял.Я использовал прокси-объект, такой как WebProxy. WebProxy = new WebProxy («proxyB.com», 80).Так что проблема не решена, но решена на данный момент.

0 голосов
/ 04 августа 2011

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

<?xml version="1.0" encoding="ISO-8859-1"?>    
  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>    
      <ns1:hospitalResponse xmlns:ns1="urn:ChnEmergency">    
        <return xsi:type="xsd:string">12.944672~80.134578~Chrompet GH~Government~GST Road, Chrompet~Chrompet~600036</return>
      </ns1:hospitalResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Если вашему прокси-серверу требуется пароль, выпопробуй:

var proxy = new WebProxy("proxy.foo.com", 8080);
proxy.Credentials = new NetworkCredential("user", "pass");
WebRequest.DefaultWebProxy = proxy;
...