Usuário com melhor resposta
Definir porta no WCF

Pergunta
-
Boa tarde Pessoal,
Estou criando um WCF Service Application.
Quanto ao desenvolvimento está tudo funcionando OK, mas este wcf irá rodar como um serviço do windows e não como IIS.
Gostaria de saber como eu faço para definir qual será a porta que ele vai conectar quando eu registrar como um serviço.
Obrigado.
Peterson Roberto Oliveira Seridonio
Desenvolvedor C#
MCTS Windows 7- Movido Levi Domingos domingo, 8 de julho de 2012 12:53 (De:C#)
Respostas
-
Olá Peterson,
dê uma olhada nestes links e vê se ajuda.
http://msdn.microsoft.com/en-us/library/ff649818.aspx
http://msdn.microsoft.com/en-us/library/ms730158.aspx
http://msdn.microsoft.com/en-us/library/ms731810.aspx
Abraços.
Leandro de Agostini MCTS - Web Application, Framework 4
- Marcado como Resposta Peterson Roberto Oliveira Seridonio sexta-feira, 20 de julho de 2012 12:14
-
Olá Leandro,
Com base nos links que você me postou eu consegui fazer.
Mas não fiz através da edição do arquivo config, pois no caso de uma distribuição em larga escala ficaria bem burocrático alterar os arquivos config.
Fiz da seguinte maneira:
public partial class ServicoReceptor : ServiceBase { ServiceHost serviceHost; public ServicoReceptor() { InitializeComponent(); } protected override void OnStart(string[] args) { try { this.CreateServiceHost(); this.CreateMetadataBehavior(); this.CreateEndPoint(); this.serviceHost.Open(); } catch (Exception ex) { Util.ErrorLog.SaveLog(ex); throw ex; } } protected override void OnStop() { if (this.serviceHost != null ) { if (this.serviceHost.State != CommunicationState.Closed) this.serviceHost.Close(); this.serviceHost = null; } } private void CreateServiceHost() { Uri uri = new Uri("HTTP://localhost:7000"); if (this.serviceHost == null) this.serviceHost = new ServiceHost(typeof(Comunicacao.Receptor), uri); } private void CreateMetadataBehavior() { ServiceMetadataBehavior serviceMetadataBehavior = null; serviceMetadataBehavior = serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>(); if (serviceMetadataBehavior == null) { serviceMetadataBehavior = new ServiceMetadataBehavior(); serviceMetadataBehavior.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(serviceMetadataBehavior); } } private void CreateEndPoint() { this.serviceHost.AddServiceEndpoint(typeof(Comunicacao.IReceptor), new WSHttpBinding(SecurityMode.None), "Receptor"); } }
Utilizando esse código na minha classe que inicia o serviço eu garanto que ele sempre abra na porta que eu desejo, independente do que foi configurado no arquivo config.
Editado:
Apenas como observação precisei mudar o tipo de projeto para "Windows Service", que gera um executável, pois o tipo de projeto "WCF Windows Application" gera uma dll para ser feito um webservice apenas.
Peterson Roberto Oliveira Seridonio
Desenvolvedor C#
MCTS Windows 7- Editado Peterson Roberto Oliveira Seridonio quarta-feira, 18 de julho de 2012 14:35 incluído observação
- Marcado como Resposta Peterson Roberto Oliveira Seridonio sexta-feira, 20 de julho de 2012 12:14
Todas as Respostas
-
Se vc clicar com o botão direito, e entrar nas configurações, tem essa opção ai ?!
Seria isso mesmo ?! Caso nao for, tentaremos outras alternativas !
Atenciosamente, Guilherme. Caso esta resposta foi útil para seu problema, por favor, marque como mesma. Caso ela apenas responda sua pergunta corretamente, não esqueça de marca-lá.
-
Seratti,
As propriedades que você está falando é do serviço já registrado ou do meu projeto?
Se for no projeto não aparece essa tela..
Estou usando VS2010 - WCF Service Application.
Peterson Roberto Oliveira Seridonio
Desenvolvedor C#
MCTS Windows 7 -
Dentro da sua solution, vc tem estrutura onde fica as telas e tudo mais. Lá tem a parte do Service Reference. É de lá que eu estou dizendo.
Não seria lá a forma que vc procura né ?!
Atenciosamente, Guilherme. Caso esta resposta foi útil para seu problema, por favor, marque como mesma. Caso ela apenas responda sua pergunta corretamente, não esqueça de marca-lá.
-
A Parte do service reference fica no meu programa cliente. Esse não tem problema nenhum.
O meu problema é com o lado server.
O WCF espera a conexão em uma determinada porta de conexão, que eu vou configurar o client para conectar nela.
Quando eu publico ele como webservice no IIS eu defino a pporta pelo próprio IIS, mas eu não sei como definir a porta do meu serviço WCF quando eu publico ele como serviço do windows.
Peterson Roberto Oliveira Seridonio
Desenvolvedor C#
MCTS Windows 7 -
Boa tarde Pessoal.
Andei pesquisando bastante sobre o meu problema, mas ainda não cheguei a nenhuma conclusão.
Li algumas coisas sobre utilizar o baseAdress para definir a porta utilizada, mas não entendi como isso deve ser feito.
Alguém pode me ajudar?
Peterson Roberto Oliveira Seridonio
Desenvolvedor C#
MCTS Windows 7 -
Olá Peterson,
dê uma olhada nestes links e vê se ajuda.
http://msdn.microsoft.com/en-us/library/ff649818.aspx
http://msdn.microsoft.com/en-us/library/ms730158.aspx
http://msdn.microsoft.com/en-us/library/ms731810.aspx
Abraços.
Leandro de Agostini MCTS - Web Application, Framework 4
- Marcado como Resposta Peterson Roberto Oliveira Seridonio sexta-feira, 20 de julho de 2012 12:14
-
Olá Leandro,
Com base nos links que você me postou eu consegui fazer.
Mas não fiz através da edição do arquivo config, pois no caso de uma distribuição em larga escala ficaria bem burocrático alterar os arquivos config.
Fiz da seguinte maneira:
public partial class ServicoReceptor : ServiceBase { ServiceHost serviceHost; public ServicoReceptor() { InitializeComponent(); } protected override void OnStart(string[] args) { try { this.CreateServiceHost(); this.CreateMetadataBehavior(); this.CreateEndPoint(); this.serviceHost.Open(); } catch (Exception ex) { Util.ErrorLog.SaveLog(ex); throw ex; } } protected override void OnStop() { if (this.serviceHost != null ) { if (this.serviceHost.State != CommunicationState.Closed) this.serviceHost.Close(); this.serviceHost = null; } } private void CreateServiceHost() { Uri uri = new Uri("HTTP://localhost:7000"); if (this.serviceHost == null) this.serviceHost = new ServiceHost(typeof(Comunicacao.Receptor), uri); } private void CreateMetadataBehavior() { ServiceMetadataBehavior serviceMetadataBehavior = null; serviceMetadataBehavior = serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>(); if (serviceMetadataBehavior == null) { serviceMetadataBehavior = new ServiceMetadataBehavior(); serviceMetadataBehavior.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(serviceMetadataBehavior); } } private void CreateEndPoint() { this.serviceHost.AddServiceEndpoint(typeof(Comunicacao.IReceptor), new WSHttpBinding(SecurityMode.None), "Receptor"); } }
Utilizando esse código na minha classe que inicia o serviço eu garanto que ele sempre abra na porta que eu desejo, independente do que foi configurado no arquivo config.
Editado:
Apenas como observação precisei mudar o tipo de projeto para "Windows Service", que gera um executável, pois o tipo de projeto "WCF Windows Application" gera uma dll para ser feito um webservice apenas.
Peterson Roberto Oliveira Seridonio
Desenvolvedor C#
MCTS Windows 7- Editado Peterson Roberto Oliveira Seridonio quarta-feira, 18 de julho de 2012 14:35 incluído observação
- Marcado como Resposta Peterson Roberto Oliveira Seridonio sexta-feira, 20 de julho de 2012 12:14