2009-11-17 6 views
4

Я могу просто позвонить веб-службе стороннего поставщика из программы форм 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> 

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

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

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

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

C: \ Users \ uxnxw01> пинг 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), 

Спасибо,

Нил Walters


анализ WireShark

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

В том, что работает, я никогда не вижу 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 не будет использовать один и тот же прокси?

ответ

3

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

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

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

+2

Да, согласно моему третьему варианту в моем ответе. ;-) –

+0

Вы также можете сделать это в web.config ' \t <прокси usesystemdefault = "False" ProxyAddress = "HTTP: //your.proxy.ip"/> ' – Ketan

2

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

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

telnet 66.77.241.56 80

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

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

+0

+1, это тоже будет мой ответ. – CodingWithSpike

+0

Посмотрите результаты в нижней части моего исходного вопроса. Не уверен, что это доказывает. – NealWalters

+0

(Должен включить функцию Telnet на сервере Win 2008 - или это было бы сделано ранее). – NealWalters

2

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

+0

Когда я бегу против формы прямо к WSE3, она работает. Когда я запускаю консольную программу в оболочку WCF, она терпит неудачу с «Destination Unreachable» и «Communication Administrative Filters», по-видимому, прокси. Но как бы прокси знал разницу между одним и другим? – NealWalters

+0

Если вы можете подключиться через telnet, как предлагал @Wim, я бы запускал сеанс Wireshark как для «старого» приложения WinForms, так и для вашего приложения WCF и сравнивал содержимое пакетов. Клиент может подключаться, но сервер может не предоставлять ответ. Возможно, структура данных несколько отличается, и сервер не обрабатывает запрос. – CodingWithSpike

+0

См. Правки в нижней части исходного вопроса. – NealWalters

0

Смотрите мои комментарии на постах других людей тоже, но в дополнении, связанное с вашим журналом диагностики, это 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> 
+0

Спасибо, но ошибка приходит в программе WCF, которая вызывает веб-службу WSS3, не являющуюся WCF .asmx WSE3. Это оболочка WCF для службы WSE. – NealWalters

Смежные вопросы