Pergunta

Eu estou tentando executar um ServiceHost do WCF como um serviço NT em uma SP1 do Windows Server 2007. A ServiceHost é reponsável por hospedar um único terminal de serviço: a basicHttpBinding com o seguinte endereço:

http://localhost:5555/ToBlah

Quando eu executar este ServiceHost em minha máquina local (Windows XP), ele funciona muito bem - quando eu postar uma mensagem SOAP para ele, eu voltar um código HTTP 202 ( "Accepted"), que é a resposta correta para o meu serviço porque o contrato tem IsOneWay = true. No entanto, quando eu executar este no meu servidor de 2007, eu recebo 503 erros quando eu tento ligar para o serviço. Eu tenho o registro de mensagens WCF virou "todo o caminho até," mas eu não estou vendo nenhum registro de qualquer tipo, o que me leva a acreditar que isso está acontecendo em um nível mais baixo do que o WCF (a chamada nunca chega ao WCF "camada" ).

Os sys-admins e eu tentei várias formas de httpcfg comandos, mas sem sorte até agora.

Eu sei tentando hospedar isso no IIS pode ser uma solução possível, mas o nosso servidor aplicativo de produção não tem o IIS instalado, então eu gostaria de simplesmente executar o serviço como um ServiceHost.

Todas as idéias serão muito apreciados!

Foi útil?

Solução

Parece-me que um firewall no servidor ou outra configuração está bloqueando a porta.

Se não, então o seu serviço pode estar ocorrendo um erro durante a criação da instância ServiceHost objeto ou durante a criação do terminal de serviço, e o erro é por algum motivo não preso (?). Você poderia escrever algum circuito interno de teste simples dentro do código de serviço para verificar se o terminal de serviço foi criado corretamente. Isso pode revelar algo interessante.

Além disso, executando um cliente desse servidor e conexão com o serviço que está sendo executado na máquina de desenvolvimento podem dizer algo mais? Você poderia usar WCFTestClient.exe, como referenciado aqui: é possível fazer o trabalho WcfTestClient para canais de transporte personalizado? . Isso pode dar-lhe informações adicionais. No entanto, você vai precisar para apoiar MetadataExchange (Mex) em seu serviço, a fim de usar esse cliente de teste.

Como alternativa, você poderia usar as amostras WCF do Estúdio pasta 2008 Amostras Visual, combinado com WCFTestClient.exe para testar alguns serviços que são auto-hospedados e são esperados para funcionar corretamente, primeiro dentro do servidor e, em seguida, do lado de fora do servidor.

Outras dicas

Bem, eu ainda não posso fazê-lo funcionar nos servidores Vista -. Ele ainda está dando 503 erros, mas eu acabei ficando-lo a instalação em um servidor Windows 2003, e parece estar trabalhando agora

Uma coisa que eu aprendi neste processo foi o uso de Httpcfg.exe para permitir que um utilizador a abrir uma porta HTTP não padrão.

Basicamente eu tive que executar algo parecido com o seguinte comando:

httpcfg.exe set urlacl /u http://+:5555/ /a "O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)"

Você pode então visualizar as configurações de URL ACL com este comando:

httpcfg.exe query urlacl

No Vista, você pode executar os mesmos tipos de comandos usando netsh (ver link abaixo).

Infelizmente, isso levou algum tempo para descobrir, mas foi uma boa experiência de aprendizagem.

Aqui estão alguns links que eu achava que eram úteis para descobrir isso:

O identidade é configurado para o serviço NT? Para isolar o problema, tente usar uma conta-admin local para ver se este problema é a permissão relacionados.

Se você estiver usando o Windows Vista ou Windows 7 você tem que usar "netsh", que é mais fácil de usar também.

  • conta de usuário local:

    netsh http add urlacl url=http://+:8001/ user=ComputerName\Username

  • conta de usuário de domínio:

    netsh http add urlacl url=http://+:8001/ user=DomainName\Username

  • Built-in conta NetworkService:

    netsh http add urlacl url=http://+:8001/ user="NT AUTHORITY\NETWORK SERVICE"

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