Pergunta

Sou capaz de ligar para o serviço da web de um fornecedor de terceiros de um programa de formulário do Windows muito bem. Quando tento chamar o mesmo serviço da Web e método da Web e o mesmo URL de um serviço da WCF, recebo o seguinte erro:

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

Estou basicamente tentando escrever um invólucro WCF para o serviço .asmx/wse3. Não vamos sair do ponto - mas a Microsoft diz que o WCF pode ligar para o WSE3, mas apenas com o SSL ligado e meu fornecedor - acredite ou não - não está permitindo a conexão SSL. Então, não estou preso escrevendo o invólucro para que eu possa ligar do BizTalk 2009. No momento, estou testando o invólucro por meio de um programa de console.

O que posso fazer para depurar? Eu adicionei o EventLog Rastreio antes e depois do serviço WCF, onde ele chama o serviço .ASMX - então eu sei que é aí que está soprando (mais o número da linha no erro acima).

Eu tenho o seguinte no meu 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>

E eu dei acesso total ao diretório a todos - mas nenhum traço aparece lá.

Quais são algumas das coisas que posso procurar ou tentar a seguir para depurar isso?

Em teoria, os resultados de "ping" não devem importar, porque o site está funcionando no programa Windows Form, que o chama muito bem.

No entanto - aqui está o que o ping mostra e parece um pouco questionável para mim:

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),

Obrigado,

Neal Walters


Análise Wireshark

Eu executei o Wireshark - publiquei alguns resultados em comentários abaixo. No entanto, depois de ler mais, nem sempre diz "destino inacessível". Mas, no caso em que está falhando, nunca recebo nenhum banco de dados. Ainda estou confuso o que fazer a seguir. Eu tenho comparado pacotes, mas é lento e confuso. Por exemplo, ainda não encontrei a chave (um policynum específico) que estou passando no pacote de solicitação. Também vejo algumas declarações "inacessíveis de destino" naquelas que funcionaram.

Naquele que funciona, nunca vejo 66.77.241.76, só vejo a procuração da nossa empresa. Mas não consigo ver nada na configuração (ou código) que diria ao WSE3 usar ou não o proxy.


Resultados do 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

Não tenho certeza do que isso prova. Como eu disse, posso definitivamente chamar o mesmo serviço da web de um formulário do Windows chamando diretamente sua interface WSE3. Eu sei que posso chegar lá dessa maneira.

Estou pensando que as principais diferenças nos dois programas é que alguém está sendo executado sob uma forma de vitória e ligando diretamente no WSE3. Aquele funciona. O que falha é basicamente 99% do mesmo código, publicado como um serviço WCF, por isso está sendo executado no IIS (então um programa de console chama o serviço WCF/IIS na minha máquina, que por sua vez chama o serviço WSE3).

Existe alguma razão pela qual o IIS não usaria o mesmo proxy?

Foi útil?

Solução

Graças a toda a ajuda acima - mas aqui está a resposta real:

valservice.proxy = new System.net.WebProxy ("http: //10.192.xx.xx: 8080", verdadeiro);

O serviço WCF em execução no IIS aparentemente não estava usando o mesmo proxy, então eu o defino manualmente no código. Vou postar outra pergunta para ver se existe uma maneira de fazer isso no arquivo de configuração.

Outras dicas

Você pode querer usar Wireshark Para ver o que está acontecendo com o tráfego de rede.

As solicitações de ping (pacotes ICMP) podem ser desativadas no firewall. Portanto, é perfeitamente possível não recuperar uma resposta de ping, enquanto é capaz de acessar a caixa em portas diferentes.

Tente usar telnet Para conectar -se a 66.77.241.56 na porta 80 e ver se você obtém uma resposta.

telnet 66.77.241.56 80

Alternativamente, a tracerte Para o referido endereço IP, pode fornecer algumas informações mais detalhadas para um de seus administradores de rede, pois isso poderia ter a ver com roteamento de rede ou NAT.

A terceira possibilidade é que você precise definir explicitamente o Proxy propriedade em seu SoapHttpClientProtocol Instância do cliente SOAP. O WinForms pega isso automaticamente, mas em um serviço/aplicativo da Web, esse não é o caso.

Veja meus comentários sobre as postagens de outras pessoas também, mas, além disso, relacionados ao seu log de diagnóstico, este é o XML que tenho na minha configuração para despejar um log de rastreamento do 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top