Partilhar via


Uso de endpoints padrão

O exemplo de StandardEndpoints demonstra como usar pontos de extremidade padrão em arquivos de configuração de serviço. Um ponto de extremidade padrão permite que o usuário simplifique as definições de ponto de extremidade usando uma única propriedade para descrever uma combinação de endereço, vinculação e contrato com propriedades adicionais associadas a ele. Este exemplo demonstra como definir e implementar um ponto de extremidade padrão personalizado e como definir propriedades específicas no ponto de extremidade.

Detalhes da amostra

Os pontos de extremidade de serviço podem ser especificados fornecendo três parâmetros: endereço, vinculação e contrato. Outros parâmetros que podem ser fornecidos incluem configuração de comportamento, cabeçalhos, ouvir URI e assim por diante. Em alguns casos, qualquer um ou todos os endereços, vinculações e contratos têm valores que não podem ser alterados. Por esse motivo, é possível usar endpoints padrão. Alguns exemplos desses pontos de extremidade incluem pontos de extremidade de troca de metadados e pontos de extremidade de descoberta. Os pontos de extremidade padrão também melhoram a usabilidade, permitindo a configuração de pontos de extremidade de serviço sem ter que fornecer informações de natureza fixa ou criar seus próprios pontos de extremidade padrão, por exemplo, para melhorar a usabilidade fornecendo um conjunto razoável de valores padrão e, assim, reduzindo a detalhamento dos arquivos de configuração.

Este exemplo consiste em dois projetos: o serviço que define dois pontos de extremidade padrão e o cliente que se comunica com o serviço. A maneira como os pontos de extremidade padrão são definidos para o serviço no arquivo de configuração é mostrada no exemplo a seguir.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <extensions>
      <endpointExtensions>
        <add name="customEndpoint" type="Microsoft.Samples.StandardEndpoints.CustomEndpointCollectionElement, service" />
      </endpointExtensions>
    </extensions>
    <services>
      <service name="Microsoft.Samples.StandardEndpoints.CalculatorService">
        <endpoint address="http://localhost:8000/Samples/Service.svc/customEndpoint" contract="Microsoft.Samples.StandardEndpoints.ICalculator" kind="customEndpoint" />
        <endpoint kind="mexEndpoint" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <standardEndpoints>
      <customEndpoint>
        <standardEndpoint property="True" />
      </customEndpoint>
    </standardEndpoints>
  </system.serviceModel>
</configuration>

O primeiro ponto final definido para o serviço é do tipo customEndpoint, cuja definição pode ser vista na <standardEndpoints> seção, na qual a propriedade property recebe o valor true. Este é o caso de um endpoint personalizado com uma nova propriedade. O segundo ponto de extremidade corresponde a um ponto de extremidade de metadados, no qual os valores para endereço, vinculação e contrato são fixos.

Para definir o elemento de ponto de extremidade padrão, uma classe derivada de StandardEndpointElement deve ser criada. No caso deste exemplo, a CustomEndpointElement classe foi definida como mostrado no exemplo a seguir.

public class CustomEndpointElement : StandardEndpointElement
{
    public bool Property
    {
        get { return (bool)base["property"]; }
        set { base["property"] = value; }
    }

    protected override ConfigurationPropertyCollection Properties
    {
        get
        {
            ConfigurationPropertyCollection properties = base.Properties;
            properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
            return properties;
        }
    }

    protected override Type EndpointType
    {
        get { return typeof(CustomEndpoint); }
    }

    protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
    {
        return new CustomEndpoint();
    }

    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
    {
    }

    protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
    {
    }
}

CreateServiceEndpoint Na função, um CustomEndpoint objeto é criado. Sua definição é mostrada no exemplo a seguir:

public class CustomEndpoint : ServiceEndpoint
{
    public CustomEndpoint()
        : this(string.Empty)
    {
    }

    public CustomEndpoint(string address)
        : this(address, ContractDescription.GetContract(typeof(ICalculator)))
    {
    }

    public CustomEndpoint(string address, ContractDescription contract)
        : base(contract)
    {
        this.Binding = new BasicHttpBinding();
        this.IsSystemEndpoint = false;
    }

    public bool Property
    {
        get;
        set;
    }
}

Para realizar a comunicação entre o serviço e o cliente, é criada uma referência de serviço no cliente para o serviço. Quando o exemplo é criado e executado, o serviço é executado e o cliente se comunica com ele. Observe que a referência do serviço deve ser atualizada sempre que houver alguma alteração no serviço.

Para usar este exemplo

  1. Usando o Visual Studio, abra o arquivo StandardEndpoints.sln.

  2. Permita o arranque de vários projetos.

    1. No Gerenciador de Soluções, clique com o botão direito do mouse na solução de Pontos de Extremidade Padrão e selecione Propriedades.

    2. Em Propriedades Comuns, selecione Projeto de Inicialização e clique em Vários Projetos de Inicialização.

    3. Mova o projeto Service para o início da lista, com a Action definida como Start.

    4. Mova o projeto Client após o projeto Service, também com a Action definida como Start.

      Isso especifica que o projeto Client é executado após o projeto Service.

  3. Para executar a solução, pressione F5.

Nota

Se estas etapas não funcionarem, verifique se o ambiente foi configurado corretamente, usando as seguintes etapas:

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
  2. Para criar a solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
  3. Para executar o exemplo em uma configuração de um ou vários computadores, siga as instruções em Executando os exemplos do Windows Communication Foundation.