/// <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)); } }
/// <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)); }