Por que não pode se conectar a um serviço WCF com net mas eu posso com http?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um serviço WCF em execução no IIS com um ServiceHostFactory. Está funcionando bem com o WSHttpBinding mas por causa da velocidade e tudo estar na mesma rede (sem firewalls) i quiser acelerar as coisas um pouco usando o NetTcpBinding vez.

Quando tento fazer isso eu recebo este erro:

Não foi possível conectar-se net.tcp: //zzz.xxx.yyy/MyService.svc. A tentativa de ligação durou um intervalo de tempo de 00: 00: 01,0464395. código de erro TCP 10061: Nenhuma conexão pôde ser feita porque a máquina de destino recusou ativamente lo x.x.x.x:. 808

Eu estou usando SecurityMode.None apenas para se certificar que não está me enroscando também eu tentei qualquer um destes em duas tentativas diferentes:

binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
binding.Security.Message.ClientCredentialType = TcpClientCredentialType.Windows;,

Também gostaria de salientar, que eu estou puxando bastante lof de dados a partir de uma das chamadas de serviço, então eu também colocar estes (tanto no http e as tentativas tcp - definindo MaxMessageSize a 1000000)

binding.MaxReceivedMessageSize = maxMessageSize;
binding.ReaderQuotas.MaxArrayLength = maxMessageSize;

Deve ser muito fácil fazê-la funcionar, então o que eu estou ausente?

UPDATE: Eu adicionei a porta TCP 808 para a identidade do site e tentou novamente. Agora eu recebo este erro:

Você tentou criar um canal para um serviço que não suporta .Net Framing. É possível que você está encontrando um ponto de extremidade HTTP.

Foi útil?

Solução

Confira este post sobre permitindo que não-HTTP ligações no IIS 7.0. Por padrão, você tem que permitir explicitamente net.tcp no IIS 7.0.

Espero que isso ajude.

UPDATE:

Vi seu comentário - infelizmente, net.tcp não é suportado no IIS 6.0. Confira este link que detalha as ligações do WCF com suporte para vários anfitriões (incluindo auto-hospedagem, WAS e IIS). Looks como única HTTP ligações de trabalho no IIS 6.0.

Outras dicas

Se você estiver usando o Vista, em seguida, garantir o WAS e net.tcp Listener Adapter serviços estão em execução.

Para qualquer um que tropeça em frente este, meu guia para questões WCF net.tcp-resolução de problemas como este:

  1. Verifique se net.tcp é um protocolo habilitado para o site (em IIS, clique com o botão direito do site, Goto configurações avançadas, e garantir que Habilitado Protocolos inclui "net"
  2. Eu não tenho certeza se isso é uma coisa paranóia, eu também sempre necessário para permitir net.tcp para o site através da linha de comando, bem como passo 1. Abra um prompt de comando e, a partir c:\windows\system32\inetsrv, digite appcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
  3. Verifique se as ligações para o site no IIS tem uma entrada para net.tcp, e que você tenha ligado para o número porta correta (para mim, eu uso 9000: * como a minha ligação a porta 9000). Verifique também se há outros sites no IIS estão usando a mesma ligação a essa porta net.tcp
  4. Verifique se o serviço "Net.TCP Listener Adapter" está em execução.

Feito.

Uma vez que eu começo Net.Tcp Listener Adapter, Serviço está funcionando bem para mim.

Poderia ser algo tão simples como as suas regras de firewall no host de serviço não permitindo porta 808?

Verificar se o IIS tem tanto protocolo apontar para o mesmo número de porta, eu encontrei apenas se for esse o caso, não vai funcionar.

Eu também estava tendo esse problema em Windows Server 2008 R2

Basta garantir que o serviço Compartilhamento de Porta Net.Tcp também é iniciado, como é uma dependência do Listener Adapter Net.Tcp.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top