Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao criar um aplicativo, você geralmente deseja adiar as decisões para o administrador após a implantação do aplicativo. Por exemplo, geralmente não há como saber com antecedência qual endereço de serviço ou URI (Uniform Resource Identifier) será. Em vez de codificar um endereço, é preferível permitir que um administrador faça isso depois de criar um serviço. Essa flexibilidade é realizada por meio da configuração.
Observação
Use a Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe) com o comutador /config nome de arquivonome de arquivo para criar rapidamente arquivos de configuração.
Seções principais
O esquema de configuração do WCF (Windows Communication Foundation) inclui as três seções principais a seguir (serviceModele bindingsservices):
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<services>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
Elementos ServiceModel
Você pode usar a seção limitada pelo system.ServiceModel elemento para configurar um tipo de serviço com um ou mais pontos de extremidade, bem como configurações para um serviço. Cada ponto de extremidade pode ser configurado com um endereço, um contrato e uma associação. Para obter mais informações sobre pontos de extremidade, consulte Visão geral da criação de ponto de extremidade. Se nenhum ponto de extremidade for especificado, o runtime adicionará pontos de extremidade padrão. Para obter mais informações sobre pontos de extremidade, associações e comportamentos padrão, consulte Configuração Simplificada e Configuração Simplificada para Serviços WCF.
Uma associação especifica transportes (HTTP, TCP, pipes, Enfileiramento de Mensagens) e protocolos (Segurança, Confiabilidade, Fluxos de transação) e consiste em elementos de associação, cada um dos quais especifica um aspecto de como um ponto de extremidade se comunica com o mundo.
Por exemplo, especificar o elemento <basicHttpBinding> indica usar HTTP como o transporte para um ponto de extremidade. Esta configuração é usada para conectar o endpoint em tempo de execução quando o serviço que utiliza este endpoint é aberto.
Há dois tipos de associações: predefinidas e personalizadas. As associações predefinidas contêm combinações úteis de elementos que são usados em cenários comuns. Para obter uma lista de tipos de associação predefinidos que o WCF fornece, consulte System-Provided Bindings. Se nenhuma coleção de associação predefinida tiver a combinação correta de recursos de que um aplicativo de serviço precisa, você poderá construir associações personalizadas para atender aos requisitos do aplicativo. Para obter mais informações sobre associações personalizadas, consulte <customBinding>.
Os quatro exemplos a seguir ilustram as configurações de associação mais comuns usadas para configurar um serviço WCF.
Especificando um ponto de extremidade para usar um tipo de associação
O primeiro exemplo ilustra como especificar um ponto de extremidade configurado com um endereço, um contrato e uma vinculação.
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<!-- This section is optional with the default configuration introduced
in .NET Framework 4. -->
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
Neste exemplo, o name atributo indica para qual tipo de serviço a configuração serve. Quando você cria um serviço em seu código com o HelloWorld contrato, ele é inicializado com todos os pontos de extremidade definidos na configuração de exemplo. Se o assembly implementar apenas um contrato de serviço, o name atributo poderá ser omitido porque o serviço usa o único tipo disponível. O atributo usa uma cadeia de caracteres, que deve estar no formato Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
O address atributo especifica o URI que outros pontos de extremidade usam para se comunicar com o serviço. O URI pode ser um caminho absoluto ou relativo. Se um endereço relativo for fornecido, espera-se que o host forneça um endereço base apropriado para o esquema de transporte usado na associação. Se um endereço não estiver configurado, o endereço base será considerado o endereço desse ponto de extremidade.
O atributo contract especifica o contrato que este endpoint está divulgando. O tipo de implementação do serviço deve implementar o tipo de contrato. Se uma implementação de serviço implementar um único tipo de contrato, essa propriedade poderá ser omitida.
O binding atributo seleciona uma associação predefinida ou personalizada a ser usada para esse ponto de extremidade específico. Um ponto de extremidade que não seleciona explicitamente uma associação usa a seleção de associação padrão, que é BasicHttpBinding.
Modificando uma associação predefinida
No exemplo a seguir, uma associação predefinida é modificada. Em seguida, ele pode ser usado para configurar qualquer ponto de extremidade no serviço. A associação é modificada definindo o ReceiveTimeout valor como 1 segundo. Observe que a propriedade retorna um TimeSpan objeto.
Essa associação alterada é encontrada na seção de associações. Essa associação alterada agora pode ser usada ao criar qualquer ponto de extremidade definindo o binding atributo no endpoint elemento.
Observação
Se você der um nome específico à associação, o bindingConfiguration especificado no ponto de extremidade do serviço deverá corresponder a ele.
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
<bindings>
<basicHttpBinding
receiveTimeout="00:00:01"
/>
</bindings>
Configurando um comportamento a ser aplicado a um serviço
No exemplo a seguir, um comportamento específico é configurado para o tipo de serviço. O ServiceMetadataBehavior elemento é usado para habilitar a Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe) para consultar o serviço e gerar documentos WSDL (Linguagem de Descrição dos Serviços Web) dos metadados.
Observação
Se você der um nome específico ao comportamento, o behaviorConfiguration especificado na seção de serviço ou ponto de extremidade deverá corresponder a ele.
<behaviors>
<behavior>
<ServiceMetadata httpGetEnabled="true" />
</behavior>
</behaviors>
<services>
<service
name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
</services>
A configuração anterior permite que um cliente chame e obtenha os metadados do serviço digitado "HelloWorld".
svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl
Especificando um serviço com dois pontos de extremidade usando valores de associação diferentes
Neste último exemplo, dois pontos de extremidade são configurados para o tipo de serviço HelloWorld. Cada ponto de extremidade usa um atributo personalizado bindingConfiguration diferente do mesmo tipo de associação (cada um modifica o basicHttpBinding).
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello1"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout" />
<endpoint
address="http://computer:8080/Hello2"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure" />
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure">
<Security mode="Transport" />
</basicHttpBinding>
</bindings>
Você pode obter o mesmo comportamento usando a configuração padrão adicionando uma protocolMapping seção e configurando as associações, conforme demonstrado no exemplo a seguir.
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />
<add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />
</protocolMapping>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure" />
<Security mode="Transport" />
</bindings>