none
Definir porta no WCF RRS feed

  • 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

    quarta-feira, 27 de junho de 2012 17:16

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

    quarta-feira, 4 de julho de 2012 14:22
  • 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


    quarta-feira, 18 de julho de 2012 14:33

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á.

    • Sugerido como Resposta Seratti quarta-feira, 27 de junho de 2012 17:59
    • Não Sugerido como Resposta Seratti quarta-feira, 27 de junho de 2012 18:58
    quarta-feira, 27 de junho de 2012 17:59
  • 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

    quarta-feira, 27 de junho de 2012 18:46
  • 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á.

    quarta-feira, 27 de junho de 2012 18:58
  • 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

    quarta-feira, 27 de junho de 2012 19:45
  • 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

    segunda-feira, 2 de julho de 2012 20:39
  • 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

    quarta-feira, 4 de julho de 2012 14:22
  • 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


    quarta-feira, 18 de julho de 2012 14:33