Example #1
0
        /// <summary>
        /// Incluir um serviço (Wcf)
        /// </summary>
        /// <param name="servico">Serviço a ser incluído</param>
        public static void IncluirCanalWcfHost(ServiceType servico)
        {
            try
            {
                // Endereço
                string enderecoTmp = string.Format("net.tcp://{0}:{1}/PointBlankCore/{2}", WcfNetwork.ConexaoEndereco, WcfNetwork.ConexaoPorta, servico.GetServiceType(false).Name);

                // Instânciar um host para o serviço
                ServiceHost host = new ServiceHost(servico.GetServiceType(false), new Uri[] { new Uri(enderecoTmp) });

                ServiceBehaviorAttribute serviceBehavior = host.Description.Behaviors.Find <ServiceBehaviorAttribute>();
                serviceBehavior.IncludeExceptionDetailInFaults = true;

                // Controle endpoint
                host.AddServiceEndpoint(servico.GetServiceType(true), WcfNetwork.ObterNovoNetTcpBinding(), enderecoTmp);
                host.Description.Behaviors.Add(new ServiceThrottlingBehavior()
                {
                    MaxConcurrentCalls = int.MaxValue, MaxConcurrentInstances = int.MaxValue, MaxConcurrentSessions = int.MaxValue
                });

                // Abrir o serviço
                host.Open();

                // Atualizar lista de controle
                WcfNetwork.ListaServiceHost.Add(host);
            }
            catch (AddressAlreadyInUseException)
            {
                throw new PointBlankException(string.Format("A porta {0} já está em uso. Verifique senão foi iniciado um outro serviço na mesma", WcfNetwork.ConexaoPorta));
            }
        }
Example #2
0
 /// <summary>
 /// Criar canal de comunicação Wcf - Utilizando os dados padrões já informados
 /// </summary>
 /// <typeparam name="TChannel">Contrato wcf</typeparam>
 /// <param name="nomeServico">Nome do serviço</param>
 /// <param name="duplex">Identifica se é um canal duplex</param>
 /// <param name="callBack">Eventos de callback para canal duplex</param>
 /// <returns>Canal criado</returns>
 public static TChannel CriarNovoCanalWcf <TChannel>(string nomeServico, bool duplex, object callBack)
 {
     return(CriarNovoCanalWcf <TChannel>(
                WcfNetwork.ConexaoEndereco,
                WcfNetwork.ConexaoPorta,
                WcfNetwork.ObterNovoNetTcpBinding(),
                nomeServico,
                duplex,
                callBack));
 }
Example #3
0
        /// <summary>
        /// Obter IGameServerBo
        /// </summary>
        /// <typeparam name="TReturn">Tipo do retorno</typeparam>
        /// <param name="code">Ação a ser executada</param>
        /// <returns>Retorno da ação</returns>
        public static TReturn GameServer <TReturn>(Func <IGameServerBo, TReturn> code)
        {
            IGameServerBo bo = FactoryBo.GameServerBo;

            try
            {
                return(code(bo));
            }
            finally
            {
                WcfNetwork.FecharCanalWcf((IClientChannel)bo);
            }
        }
Example #4
0
        /// <summary>
        /// Obter IContaBo
        /// </summary>
        /// <param name="code">Ação a ser executada</param>
        public static void Conta(Action <IContaBo> code)
        {
            IContaBo bo = FactoryBo.ContaBo;

            try
            {
                code(bo);
            }
            finally
            {
                WcfNetwork.FecharCanalWcf((IClientChannel)bo);
            }
        }
Example #5
0
        /// <summary>
        /// Obter IContaBo
        /// </summary>
        /// <typeparam name="TReturn">Tipo do retorno</typeparam>
        /// <param name="code">Ação a ser executada</param>
        /// <returns>Retorno da ação</returns>
        public static TReturn Conta <TReturn>(Func <IContaBo, TReturn> code)
        {
            IContaBo bo = FactoryBo.ContaBo;

            try
            {
                return(code(bo));
            }
            finally
            {
                WcfNetwork.FecharCanalWcf((IClientChannel)bo);
            }
        }
Example #6
0
        /// <summary>
        /// Obter IGameChannelBo
        /// </summary>
        /// <param name="code">Ação a ser executada</param>
        public static void GameChannel(Action <IGameChannelBo> code)
        {
            IGameChannelBo bo = FactoryBo.GameChannelBo;

            try
            {
                code(bo);
            }
            finally
            {
                WcfNetwork.FecharCanalWcf((IClientChannel)bo);
            }
        }
Example #7
0
        /// <summary>
        /// Criar canal de comunicação Wcf
        /// </summary>
        /// <typeparam name="TChannel">Contrato wcf</typeparam>
        /// <param name="enderecoUrl">Endereço url</param>
        /// <param name="enderecoPorta">Endereço Porta</param>
        /// <param name="chaveSeguranca">Chave de segurança (Descriptografada)</param>
        /// <param name="httpBinding">Objeto NetTcpBinding</param>
        /// <param name="nomeServico">Nome do serviço</param>
        /// <param name="duplex">Identifica se é um canal duplex</param>
        /// <param name="callBack">Eventos de callback para canal duplex</param>
        /// <returns>Canal criado</returns>
        public static TChannel CriarNovoCanalWcf <TChannel>(
            string enderecoUrl,
            int enderecoPorta,
            Binding httpBinding,
            string nomeServico,
            bool duplex,
            object callBack)
        {
            try
            {
                // Controle
                EndpointAddress endPoint = new EndpointAddress(new Uri(string.Format("net.tcp://{0}:{1}/PointBlankCore/{2}", enderecoUrl, enderecoPorta, nomeServico)));

                // ChannelFactory
                ChannelFactory <TChannel> scf = null;
                switch (duplex)
                {
                case true:
                    scf = new DuplexChannelFactory <TChannel>(new InstanceContext(callBack), httpBinding, endPoint);
                    break;

                default:
                    scf = new ChannelFactory <TChannel>(httpBinding, endPoint);
                    break;
                }

                // Criar o canal de comunicação
                TChannel canalRetorno = scf.CreateChannel();

                // Validar conexão
                try
                {
                    WcfNetwork.ValidarConexao(canalRetorno, enderecoUrl, enderecoPorta, false);
                }
                catch
                {
                    try
                    {
                        scf.Abort();
                    }
                    catch
                    {
                        Logger.Error("[WcfNetWork] - Erro ao Abortar o Canal WCF");
                    }

                    throw;
                }

                // Retorno
                return(canalRetorno);
            }
            catch (PointBlankException)
            {
                throw;
            }
            catch (Exception exp)
            {
                // Erro gerado ao acionar o invoke do método de validação
                if ((exp is TargetInvocationException) && (exp.InnerException != null))
                {
                    // Erro de segurança
                    if ((exp.InnerException is MessageSecurityException) && (exp.InnerException.InnerException != null))
                    {
                        throw new PointBlankException(PointBlankException.GetMessageFull(exp.InnerException.InnerException, true));
                    }

                    // Identificar se foi erro de time-out
                    if (exp.InnerException is TimeoutException)
                    {
                        throw new PointBlankException("Não foi possível conectar no servidor de aplicação (Erro de Timeout)");
                    }

                    throw new PointBlankException("Não foi possível conectar no servidor de aplicação.", exp.InnerException);
                }

                // Alterar tipo do exception para o padrão
                throw new PointBlankException("Não foi possível conectar no servidor de aplicação!", exp);
            }
        }
Example #8
0
 /// <summary>
 /// Validar a conexão
 /// </summary>
 /// <param name="communicationObject">Objeto ICommunicationObject</param>
 /// <param name="enderecoUrl">Endereço url</param>
 /// <param name="enderecoPorta">Endereço Porta</param>
 /// <param name="validarMetodoBo">Identifica se será chamado o método 'ValidarServicoWcf' do BO</param>
 public static void ValidarConexao(string enderecoUrl, int enderecoPorta)
 {
     WcfNetwork.ValidarConexao(null, enderecoUrl, enderecoPorta, false);
 }