Partilhar via


Configurando serviços usando arquivos de configuração

Configurar um serviço WCF (Windows Communication Foundation) com um ficheiro de configuração oferece a flexibilidade de fornecer dados de comportamento do ponto de extremidade e do serviço no momento da implementação, em vez de no momento do design. Este tópico descreve as principais técnicas disponíveis.

Um serviço WCF é configurável usando a tecnologia de configuração do .NET Framework. Mais comumente, elementos XML são adicionados ao arquivo Web.config para um site do IIS (Serviços de Informações da Internet) que hospeda um serviço WCF. Os elementos permitem alterar detalhes, como os endereços dos pontos de extremidade (os endereços reais usados para se comunicar com o serviço) em uma base máquina por máquina. Além disso, o WCF inclui vários elementos fornecidos pelo sistema que permitem selecionar rapidamente os recursos mais básicos para um serviço. A partir do .NET Framework 4, o WCF vem com um novo modelo de configuração padrão que simplifica os requisitos de configuração do WCF. Se você não fornecer nenhuma configuração WCF para um serviço específico, o tempo de execução configurará automaticamente seu serviço com alguns pontos de extremidade padrão e ligação/comportamento padrão. Na prática, escrever configuração é uma parte importante da programação de aplicativos WCF.

Para obter mais informações, consulte Configurar Associações para Serviços. Para obter uma lista dos elementos mais comumente usados, consulte Ligações fornecidas pelo sistema. Para obter mais informações sobre pontos de extremidade padrão, associações e comportamentos, consulte Configuração simplificada e configuração simplificada para serviços WCF.

Importante

Ao implantar cenários lado a lado em que duas versões diferentes de um serviço são implantadas, é necessário especificar nomes parciais de assemblies referenciados em arquivos de configuração. Isso ocorre porque o arquivo de configuração é compartilhado entre todas as versões de um serviço e eles podem estar sendo executados em diferentes versões do .NET Framework.

System.Configuration: Web.config e App.config

WCF usa o sistema de configuração System.Configuration do .NET Framework.

Ao configurar um serviço no Visual Studio, use um arquivo Web.config ou um arquivo App.config para especificar as configurações. A escolha do nome do arquivo de configuração é determinada pelo ambiente de hospedagem escolhido para o serviço. Se você estiver usando o IIS para hospedar seu serviço, use um arquivo Web.config. Se você estiver usando qualquer outro ambiente de hospedagem, use um arquivo App.config.

No Visual Studio, o arquivo chamado App.config é usado para criar o arquivo de configuração final. O nome final realmente usado para a configuração depende do nome do assembly. Por exemplo, um assembly chamado "Cohowinery.exe" tem um nome de arquivo de configuração final de "Cohowinery.exe.config". No entanto, você só precisa modificar o arquivo App.config. As alterações feitas nesse arquivo são feitas automaticamente no arquivo de configuração final do aplicativo em tempo de compilação.

Ao usar um App.config, o arquivo do sistema de configuração mescla o arquivo App.config com o conteúdo do arquivo Machine.config quando o aplicativo é iniciado e a configuração é aplicada. Esse mecanismo permite que as configurações de toda a máquina sejam definidas no arquivo Machine.config. O arquivo App.config pode ser usado para substituir as configurações do arquivo Machine.config; você também pode bloquear as configurações no arquivo Machine.config para que elas sejam usadas. No caso Web.config, o sistema de configuração mescla os arquivos Web.config em todos os diretórios que levam ao diretório do aplicativo na configuração que é aplicada. Para obter mais informações sobre a configuração e a definição de prioridades, consulte os System.Configuration tópicos no namespace.

Principais seções do arquivo de configuração

As seções principais no arquivo de configuração incluem os seguintes elementos.

<system.ServiceModel>

   <services>
   <!-- Define the service endpoints. This section is optional in the new
    default configuration model in .NET Framework 4. -->
      <service>
         <endpoint/>
      </service>
   </services>

   <bindings>
   <!-- Specify one or more of the system-provided binding elements,
    for example, <basicHttpBinding> -->
   <!-- Alternatively, <customBinding> elements. -->
      <binding>
      <!-- For example, a <BasicHttpBinding> element. -->
      </binding>
   </bindings>

   <behaviors>
   <!-- One or more of the system-provided or custom behavior elements. -->
      <behavior>
      <!-- For example, a <throttling> element. -->
      </behavior>
   </behaviors>

</system.ServiceModel>

Nota

As seções de ligações e comportamentos são opcionais e só são incluídas se necessário.

O <elemento de serviços>

O services elemento contém as especificações para todos os serviços que o aplicativo hospeda. Começando com o modelo de configuração simplificado no .NET Framework 4, esta seção é opcional.

<serviços>

O <elemento de serviço>

Cada serviço tem estes atributos:

  • name. Especifica o tipo que fornece uma implementação de um contrato de serviço. Este é um nome totalmente qualificado que consiste no namespace, um ponto e, em seguida, o nome do tipo. Por exemplo, "MyNameSpace.myServiceType".

  • behaviorConfiguration. Especifica o nome de um dos behavior elementos encontrados no behaviors elemento . O comportamento especificado rege ações, como se o serviço permite a imitação. Se o seu valor for um nome vazio ou se não for fornecido behaviorConfiguration, o conjunto padrão de comportamentos de serviço será adicionado ao serviço.

  • <serviço>

O <elemento de ponto de extremidade>

Cada ponto de extremidade requer um endereço, uma associação e um contrato, que são representados pelos seguintes atributos:

  • address. Especifica o URI (Uniform Resource Identifier) do serviço, que pode ser um endereço absoluto ou um endereço fornecido em relação ao endereço base do serviço. Se definido como uma cadeia de caracteres vazia, indica que o ponto de extremidade está disponível no endereço base especificado ao criar o ServiceHost para o serviço.

  • binding. Normalmente, especifica uma associação fornecida pelo sistema, como WSHttpBinding, mas também pode especificar uma associação definida pelo usuário. A associação especificada determina o tipo de transporte, segurança e codificação usados, e se sessões, transações ou streaming confiáveis são suportados ou habilitados.

  • bindingConfiguration. Se os valores padrão de uma associação precisarem ser modificados, isso poderá ser feito configurando o elemento apropriado binding no bindings elemento . Esse atributo deve receber o mesmo valor que o name atributo do binding elemento que é usado para alterar os padrões. Se nenhum nome for fornecido, ou nenhum bindingConfiguration for especificado na ligação, a associação padrão do tipo de associação será usada no ponto de extremidade.

  • contract. Especifica a interface que define o contrato. Esta é a interface implementada no tipo CLR (Ambiente de Execução Comum) especificado pelo atributo name do elemento service.

  • <Ponto final>

O <elemento bindings>

O bindings elemento contém as especificações para todas as associações que podem ser usadas por qualquer ponto de extremidade definido em qualquer serviço.

<Ligações>

O <elemento de ligação>

Os binding elementos contidos no bindings elemento podem ser uma das ligações fornecidas pelo sistema (consulte Ligações fornecidas pelo sistema) ou uma ligação personalizada (consulte Ligações personalizadas). O binding elemento tem um name atributo que correlaciona a ligação com o ponto de extremidade especificado no bindingConfiguration atributo do endpoint elemento . Se nenhum nome for especificado, essa associação corresponderá ao padrão desse tipo de associação.

Para obter mais informações sobre como configurar serviços e clientes, consulte Configurando serviços WCF.

<vinculação>

O <elemento de comportamentos>

Este é um elemento de contêiner para os behavior elementos que definem os comportamentos de um serviço.

<comportamentos>

O <elemento de comportamento>

Cada behavior elemento é identificado por um name atributo e fornece um comportamento fornecido pelo sistema, como <throttling>, ou um comportamento personalizado. Se nenhum nome for fornecido, esse elemento de comportamento corresponderá ao serviço padrão ou ao comportamento do ponto de extremidade.

<comportamento>

Como usar configurações de vinculação e comportamento

O WCF facilita a partilha de configurações entre endpoints através de um sistema de referência na configuração. Em vez de atribuir diretamente valores de configuração a um ponto de extremidade, os valores de configuração relacionados à associação são agrupados em elementos bindingConfiguration na seção <binding>. Uma configuração de associação é um grupo nomeado de configurações em uma associação. Os pontos de extremidade podem então fazer referência ao bindingConfiguration pelo nome.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.serviceModel>
  <bindings>
    <basicHttpBinding>
     <binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
     <binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
     <binding closeTimeout="00:03:00" />  <!-- Default binding for basicHttpBinding -->
    </basicHttpBinding>
     </bindings>
     <services>
      <service name="MyNamespace.myServiceType">
       <endpoint
          address="myAddress" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration1"
          contract="MyContract"  />
       <endpoint
          address="myAddress2" binding="basicHttpBinding"
          bindingConfiguration="myBindingConfiguration2"
          contract="MyContract" />
       <endpoint
          address="myAddress3" binding="basicHttpBinding"
          contract="MyContract" />
       </service>
      </services>
    </system.serviceModel>
</configuration>

O name de bindingConfiguration é definido no <binding> elemento . O name deve ser uma cadeia de caracteres exclusiva dentro do escopo do tipo de vinculação — neste caso, o <basicHttpBinding>, ou um valor vazio para se referir à associação padrão. O ponto de extremidade vincula-se à configuração definindo o bindingConfiguration atributo para essa cadeia de caracteres.

A behaviorConfiguration é implementado da mesma forma, como ilustrado no exemplo a seguir.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="myBehavior">
           <callbackDebug includeExceptionDetailInFaults="true" />
         </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>

    </behaviors>
    <services>
     <service name="NewServiceType">
       <endpoint
          address="myAddress3" behaviorConfiguration="myBehavior"
          binding="basicHttpBinding"
          contract="MyContract" />
      </service>
    </services>
   </system.serviceModel>
</configuration>

Observe que o conjunto padrão de comportamentos de serviço é adicionado ao serviço. Este sistema permite que os pontos finais partilhem configurações comuns sem redefinir as definições. Se o âmbito de toda a máquina for necessário, crie a configuração de associação ou comportamento em Machine.config. As configurações estão disponíveis em todos os ficheiros App.config. A Ferramenta Editor de Configuração (SvcConfigEditor.exe) facilita a criação de configurações.

Mesclagem de comportamento

O recurso de mesclagem de comportamento facilita o gerenciamento de comportamentos quando você deseja que um conjunto de comportamentos comuns seja usado de forma consistente. Esse recurso permite especificar comportamentos em diferentes níveis da hierarquia de configuração e fazer com que os serviços herdem comportamentos de vários níveis da hierarquia de configuração. Para ilustrar como isso funciona, suponha que você tenha o seguinte layout de diretório virtual no IIS:

~\Web.config~\Service.svc~\Child\Web.config~\Child\Service.svc

E o seu ~\Web.config ficheiro tem o seguinte conteúdo:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

E você tem uma configuração Web.config filho localizada em ~\Child\Web.config com os seguintes conteúdos:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

O serviço localizado em ~\Child\Service.svc se comportará como se tivesse os comportamentos serviceDebug e serviceMetadata. O serviço localizado em ~\Service.svc terá apenas o comportamento serviceDebug. O que acontece é que as duas coleções de comportamento com o mesmo nome (neste caso, a cadeia de caracteres vazia) são mescladas.

Você também pode limpar coleções de comportamento usando a <tag clear> e remover comportamentos individuais da coleção usando a <tag remover> . Por exemplo, as duas configurações a seguir resultam em que o serviço filho tenha apenas o comportamento de serviceMetadata:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <remove name="serviceDebug"/>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <clear/>
          <serviceMetadata httpGetEnabled="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

A mesclagem de comportamento é feita para coleções de comportamento sem nome, como mostrado acima, e coleções de comportamento nomeadas também.

A mesclagem de comportamento funciona no ambiente de hospedagem do IIS, no qual os arquivos Web.config são mesclados hierarquicamente com o arquivo Web.config raiz e machine.config. Mas também funciona no ambiente do aplicativo, onde machine.config pode mesclar com o arquivo App.config.

A fusão de comportamento aplica-se tanto a comportamentos de ponto de extremidade quanto a comportamentos de serviço na configuração.

Se uma coleção de comportamentos do filho contiver um comportamento que já está presente na coleção de comportamentos do pai, o comportamento do filho sobrepõe o do pai. Portanto, se uma coleção de comportamento pai tivesse <serviceMetadata httpGetEnabled="False" /> e uma coleção de comportamento filho tivesse <serviceMetadata httpGetEnabled="True" />, o comportamento filho substituiria o comportamento pai na coleção de comportamentos e httpGetEnabled seria "true".

Consulte também