"Невозможно подключиться к удаленному серверу"

StackOverflow https://stackoverflow.com/questions/1752646

  •  20-09-2019
  •  | 
  •  

Вопрос

Я могу нормально вызвать веб-службу стороннего поставщика из программы форм Windows.Когда я пытаюсь вызвать ту же веб-службу и веб-метод и тот же URL-адрес из веб-службы WCF, я получаю следующую ошибку:

ExportValuationPolicyNumber:Exception=System.Net.WebException: Unable to connect to the remote server ---> 
System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly 
respond after a period of time, or established connection failed 
because connected host has failed to respond 66.77.241.76:80

   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetRequestStream()
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at TFBIC.RCT.WCFWebServices.ExpressLync.ValuationServiceWse.ExportValuationPolicyNumber(String PolicyNumber) in c:\Source\TFBIC.RCT.WCFWebServices\TFBIC.RCT.WCFWebServices\Web References\ExpressLync\Reference.cs:line 519
   at TFBIC.RCT.WCFWebServices.ValuationService.ExportValuationPolicyNumber(String PolicyNumber) in c:\Source\TFBIC.RCT.WCFWebServices\TFBIC.RCT.WCFWebServices\ValuationService.svc.cs:line 97

По сути, я пытаюсь написать оболочку WCF для службы поставщика .asmx/WSE3.Не будем отклоняться от темы — Microsoft утверждает, что WCF может вызывать WSE3, но только с включенным SSL, а мой поставщик — хотите верьте, хотите нет — не разрешает SSL-соединение.Итак, я застрял в написании оболочки, чтобы иметь возможность звонить из BizTalk 2009.Прямо сейчас тестирую обертку через консольную программу.

Что я могу сделать для отладки?Я добавил трассировки EventLog до и после службы WCF, где она вызывает службу .asmx, поэтому я знаю, где она сгорает (плюс номер строки в ошибке выше).

У меня в web.config есть следующее:

<microsoft.web.services3>
        <diagnostics>
                <trace enabled="true" 
                           input="c:\inetpub\wwwroot\wsetraces\InputTrace.webinfo" 
                           output="c:\inetpub\wwwroot\wsetraces\OutputTrace.webinfo" />
                <detailedErrors enabled="true" />
        </diagnostics>
</microsoft.web.services3>

и я предоставил всем полный доступ к каталогу - но никаких следов там не появляется.

Что я могу найти или попробовать, чтобы отладить это?

Теоретически результаты «пинга» не должны иметь значения, потому что веб-сайт работает из программы формы Windows, которая нормально его вызывает.

Тем не менее - вот что показывает Ping и мне это кажется немного сомнительным:

C:\Users\uxnxw01>ping rct.msbexpress.net

Pinging rct.msbexpress.net [66.77.241.56] with 32 bytes of data:
Reply from 10.193.99.5: Destination net unreachable.
Reply from 10.193.99.5: Destination net unreachable.
Request timed out.
Reply from 10.193.99.5: Destination net unreachable.

Ping statistics for 66.77.241.56:
    Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),

Спасибо,

Нил Уолтерс


Анализ WireShark

Я запустил Wireshark - опубликовал некоторые результаты в комментариях ниже.Однако, прочитав его дальше, там не всегда написано «Пункт назначения недостижим».Но в случае сбоя я никогда не получаю никаких данных.Я все еще в замешательстве, что делать дальше.Я сравнивал пакеты, но это медленно и запутанно.Например, я до сих пор не нашел ключ (определенный номер политики), который передаю в пакете запроса.Я также вижу несколько утверждений «Пункт назначения недоступен» в том, который сработал.

В том, что работает, я никогда не вижу 66.77.241.76, вижу только прокси нашей компании.Но я не вижу в конфигурации (или коде) ничего, что могло бы указать WSE3 использовать или не использовать прокси.


Результаты Telnet:

C:\Users\uxnxw01>telnet 66.77.241.56 80
Connecting To 66.77.241.56...Could not open connection to the host, on port 80:
Connect failed

C:\Users\uxnxw01>telnet 66.77.241.76 80
Connecting To 66.77.241.76...Could not open connection to the host, on port 80:
Connect failed

Я не уверен, что это доказывает.Как я уже сказал, я определенно МОГУ вызвать тот же веб-сервис из формы Windows, напрямую вызывая его интерфейс WSE3.Я знаю, что смогу туда добраться.

Я думаю, что основные различия между этими двумя программами заключаются в том, что одна из них работает в форме Win и напрямую вызывает WSE3.Это работает.Тот, который дает сбой, по сути, на 99% тот же код, опубликованный как служба WCF, поэтому он работает под IIS (затем консольная программа вызывает службу WCF/IIS на моем компьютере, которая, в свою очередь, вызывает службу WSE3).

Есть ли какая-то причина, по которой IIS не будет использовать тот же прокси?

Это было полезно?

Решение

Спасибо всей помощи выше, но вот реальный ответ:

valservice.Proxy = новый System.Net.WebProxy("http://10.192.xx.xx:8080", истинный);

Служба WCF, работающая под IIS, очевидно, НЕ использовала тот же прокси-сервер, поэтому я установил его вручную в коде.Я опубликую еще один вопрос, чтобы узнать, есть ли способ сделать это в файле конфигурации.

Другие советы

Вы можете использовать Вайршарк чтобы увидеть, что происходит с сетевым трафиком.

Запросы Ping (пакеты ICMP) могут быть отключены на брандмауэре.Таким образом, вполне возможно не получить ответ на ping, но при этом иметь доступ к устройству через разные порты.

Попробуйте и используйте telnet подключиться к 66.77.241.56 через порт 80 и посмотреть, получите ли вы ответ.

telnet 66.77.241.56 80

Альтернативно, tracerte указанный IP-адрес может предоставить более подробную информацию одному из ваших сетевых администраторов, поскольку это в равной степени может быть связано с сетевой маршрутизацией или NAT.

Третья возможность заключается в том, что вам может потребоваться явно установить Proxy недвижимость на вашем SoapHttpClientProtocol Экземпляр клиента SOAP.WinForms распознает это автоматически, но в веб-сервисе/приложении это не так.

См. также мои комментарии к сообщениям других людей, но, кроме того, что касается вашего журнала диагностики, это XML, который у меня есть в моей конфигурации для создания дампа журнала трассировки WCF:

<configuration>

    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
                <listeners>
                    <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "MyService.svclog" />
                </listeners>
            </source>
        </sources>
    </system.diagnostics>

</configuration>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top