Sdílet prostřednictvím


Windows a Plataforma de Aplicações: Hospedar serviços WCF com "Windows Service"

Ola, tudo bem ?

No me primeiro blog sobre este assunto eu mostrei para você as possibilidades como hospedar serviços WCF (https://blogs.technet.com/markuschristen/archive/2009/04/17/hospedar-servi-os-wcf-e-wf.aspx).  Vamos continuar este papo e discutir este assunto mais “Deep”.

Quando você quer hospedar seus serviços WCF você preciso se perguntar seguintes perguntas:

  • Quais possibilidades eu tenho para hospedar serviços WCF ?
  • Quais são os vantagens de cada um ?
  • Quais são as melhoras praticas da Microsoft?

No podemos definir 3 tipos de hospedagem de serviços WCF:

  • “Self-Hosting”
  • “Windows Service”
  • “IIS, WAS”

Neste blog vamos tratar item 2 e 3. Uma outra pergunta importante é como nos podemos garantir o isolamento das aplicações e quanta impacta isto na escolha de um contêiner de hospedagem.

.Net Application Domain

Uma “.Net Application Domain “ é equivalente a CLR do que o processo de um sistema operacional. Uma “.Net Application Domain” é usado para isolar os aplicativos uns dos outros.  A separação é necessária, para que aplicativos não se afetam mutuamente. Uma “.Net Application Domain” do Common Language Runtime está contido em um processo de sistema operacional. Um processo pode conter várias “.Net Application Domains” .

Vantagens:

  • Muitas “.Net Application Domains” podem estar contidos dentro de um processo único
  • “.Net Application Domain’s” pode ser interrompido sem afetar o Estado de outro em execução no mesmo processo.
  • Um erro nãoafeta outras “.Net Application Domains”ou bloqueie todo o processo que hospeda
  • Informações de configuração é segmentado per “.Net Application Domain”
  • Cada “.Net Application Domain” pode ter níveis de acesso de segurança diferentes atribuídos a eles, tudo num único processo.

Importante: Concluindo nos podemos falar que todo ServiceHost precisa um WindowsProcess e uma “Application Domain”.

Para determinar qual hospedagem seria mais adequado para seu cenário, você precisa responder seguinte perguntas

  1. Disponibilidade: Quando você precisa acessar seu serviço , 24/7 ?
  2. Confiabilidade: O que acontece quando seu serviço para ?
  3. Processo de Gerenciamento: Você precisa informações sobre a operação do seu serviço ?
  4. Processo de Versionamento: Você precisa suportar vários versões do seu serviço ?
  5. Processo de Implementação: Qual e seu processo de implementação? Você precisa usar o processo de empacotamento o xcopy e suficiente ?
  6. Chamada de Persistência: Você precisa uma chamada de persistência ?

Baseado em estas perguntas você agora pode definir qual contêiner de hospedagem é mais adequado para seu cenário. Durante este blog nos vamos tratar a hospedagem via “Windows Service” e nos próximos nos vamos continuar com IIS e WAS.

Windows Service

O cenário aonde você habilita os Serviços WCF via o “Windows Service”, opção logica de hospedar uma serviços WCF de longa duração fora do Internet Information Services (IIS) em um ambiente seguro que não é ativada via mensagem. A instancia do serviço é controlada, pelo sistema operacional. Esta opção de hospedagem está disponível em todas as versões do Windows.

Serviços Windows podem ser gerenciados com o Microsoft.ManagementConsole.SnapIn no Microsoft Management Console (MMC) e podem ser configurados para iniciar automaticamente quando o sistema é inicializado. Esta opção de hospedagem consiste em registrar o domínio de aplicativo (AppDomain) que hospeda um serviço WCF como um serviço gerenciado pelo Windows para que a instancia do processo do serviço é controlada pelo Gerenciador de controle de serviços.

Disponibilidade

  • O Gerenciador de controle de serviço do Windows permite definir o tipo de inicialização para automático, para que logo que o Windows é iniciado, o serviço será iniciado, sem um logon interativo no computador
  • Gerenciador de controle de serviço do Windows possui suporte interno para reiniciar serviços quando ocorrem falhas.
  • Possiblidade de usar equipamentos de balanceamento de carga como NLB, Big5 etc.

Confiabilidade

  • O gerenciador de controle de serviço do Windows permite escolher uma identidade de segurança específicas em que você quiser o serviço executado incluindo contas internas de serviço de sistema ou rede.

Processo de Gerenciamento

  • Em geral, os IT-Pros sabem muito sobre o Gerenciador de controle de serviços e outras ferramentas, no entanto, para fazer serviços sustentável, você provavelmente teria que adicionar alguns recursos de log e instrumentação  (SCOM 2008)

Processo de Versionamento

  • Versionamento precisa ser providenciado via código customizado (Codificação) e processos de IT-Pros.

Processo de Implementação

Chamada de Persistência

  • Chamada de persistencia via código customizado

Pré-requisitos:

Application Configuration File

Exemplo de um “Application Configuration File” para hospedar um Serviço WCF. Este arquivo precisa ser criado e configurado baseado no Schema WCF. Existe um editor que ajuda muito: Configuration Editor Tool (SvcConfigEditor.exe). Este exemplo vem sem um segurança reforçada, mais informações via WCF-Security Guide.

    1:  <?xml version="1.0" encoding="utf-8" ?>
    2:  <configuration>
    3:    <system.serviceModel>
    4:      <services>
    5:        <service name="Microsoft.ServiceModel.Samples.CalculatorService"
    6:                 behaviorConfiguration="CalculatorServiceBehavior">
    7:          <host>
    8:            <baseAddresses>
    9:               <add baseAddress="https://localhost:8000/ServiceModelSamples/service"/ >
   10:            </baseAddresses>
   11:          </host>
   12:          <!-- this endpoint is exposed at the base address provided by host: https://localhost:8000/ServiceModelSamples/service  -->
   13:          <endpoint address=""
   14:                    binding="wsHttpBinding" 
   15:                    contract="Microsoft.ServiceModel.Samples.ICalculator" />
   16:          <!-- the mex endpoint is explosed at https://localhost:8000/ServiceModelSamples/service/mex -->
   17:          <endpoint address="mex"
   18:                    binding="mexHttpBinding"
   19:                    contract="IMetadataExchange" />
   20:        </service>
   21:      </services>
   22:      <behaviors>
   23:        <serviceBehaviors>
   24:          <behavior name="CalculatorServiceBehavior">
   25:            <serviceMetadata httpGetEnabled="true"/>
   26:            <serviceDebug includeExceptionDetailInFaults="False"/>
   27:          </behavior>
   28:        </serviceBehaviors>
   29:      </behaviors>
   30:    </system.serviceModel>
   31:  </configuration>

 

Mais perguntas ? Ate o próximo Blogs, Markus

Technorati Tags: WCF,WindowsService