Partilhar via


Parâmetros de avaliação padrão

Os pontos de extremidade são definidos especificando um endereço, uma vinculação e um contrato. Outros parâmetros que podem ser definidos em um ponto de extremidade incluem configuração de comportamento, cabeçalhos e URIs de escuta. Para certos tipos de pontos de extremidade, esses valores não são alterados. Por exemplo, os pontos finais de troca de metadados sempre usam o IMetadataExchange contrato. Outros pontos de extremidade, como WebHttpEndpoint sempre exigem um comportamento de ponto de extremidade especificado. A usabilidade de um ponto de extremidade pode ser melhorada com pontos de extremidade com valores padrão para propriedades de ponto de extremidade comumente usadas. Os pontos de extremidade padrão permitem que um desenvolvedor defina um ponto de extremidade que tenha valores padrão ou onde uma ou mais propriedades do ponto de extremidade não sejam alteradas. Esses pontos de extremidade permitem que você use esse ponto de extremidade sem precisar especificar informações de natureza estática. Pontos de extremidade padrão podem ser usados para endpoints de infraestrutura e aplicativos.

Pontos finais de infraestrutura

Um serviço pode expor pontos de extremidade com algumas das propriedades não implementadas explicitamente pelo autor do serviço. Por exemplo, o ponto de extremidade de troca de metadados expõe o contrato, mas como autor de serviço você não implementa essa interface, ela é implementada IMetadataExchange pelo WCF. Esses pontos de extremidade de infraestrutura têm valores padrão para uma ou mais propriedades de ponto final, algumas das quais podem ser inalteráveis. A Contract propriedade do ponto de extremidade de troca de metadados deve ser IMetadataExchange, enquanto outras propriedades, como a vinculação, podem ser fornecidas pelo desenvolvedor. Os pontos de extremidade de infraestrutura são identificados definindo a IsSystemEndpoint propriedade como true.

Pontos de extremidade do aplicativo

Os desenvolvedores de aplicativos podem definir seus próprios pontos de extremidade padrão que especificam valores padrão para o endereço, associação ou contrato. Você define um ponto de extremidade padrão derivando uma classe e definindo as propriedades apropriadas do ponto de ServiceEndpoint extremidade. Você pode fornecer valores padrão para propriedades que podem ser alteradas. Algumas outras propriedades terão valores estáticos que não podem ser alterados. O exemplo a seguir mostra como implementar um ponto de extremidade padrão.

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

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

    // Create the custom endpoint with a fixed binding
    public CustomEndpoint(string address, ContractDescription contract)
        : base(contract)
    {
        this.Binding = new BasicHttpBinding();
        this.IsSystemEndpoint = false;
    }

    // Definition of the additional property of this endpoint
    public bool Property { get; set; }
}

Para usar um ponto de extremidade personalizado definido pelo usuário em um arquivo de configuração, você deve derivar uma classe de StandardEndpointElement, derivar uma classe de , e registrar o novo ponto de StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration>extremidade padrão na seção de extensões em app.config ou machine.config. O StandardEndpointElement fornece suporte de configuração para o ponto de extremidade padrão, conforme mostrado no exemplo a seguir.

public class CustomEndpointElement : StandardEndpointElement
{
    // Definition of the additional property for the standard endpoint element
    public bool Property
    {
        get { return (bool)base["property"]; }
        set { base["property"] = value; }
    }

    // The additional property needs to be added to the properties of the standard endpoint element
    protected override ConfigurationPropertyCollection Properties
    {
        get
        {
            ConfigurationPropertyCollection properties = base.Properties;
            properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
            return properties;
        }
    }

    // Return the type of this standard endpoint
    protected override Type EndpointType
    {
        get { return typeof(CustomEndpoint); }
    }

    // Create the custom service endpoint
    protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
    {
        return new CustomEndpoint();
    }

    // Read the value given to the property in config and save it
    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    // Read the value given to the property in config and save it
    protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
    {
        CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
        customEndpoint.Property = this.Property;
    }

    // No validation in this sample
    protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
    {
    }

    // No validation in this sample
    protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
    {
    }
}

O StandardEndpointCollectionElement<TStandardEndpoint,TEndpointConfiguration> fornece o tipo de suporte para a coleção que aparece na <standardEndpoints> seção na configuração para o ponto de extremidade padrão. O exemplo a seguir mostra como implementar essa classe.

public class CustomEndpointCollectionElement : StandardEndpointCollectionElement<CustomEndpoint, CustomEndpointElement>
{
    // ...
}

O exemplo a seguir mostra como registrar um ponto de extremidade padrão na seção extensões.

<extensions>
      <standardEndpointExtensions>
        <add
          name="customStandardEndpoint"
          type="CustomEndpointCollectionElement, Example.dll,
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=ffffffffffffffff"/>
      </standardEndpointExtensions>
</extensions>

Configurando um ponto de extremidade padrão

Pontos de extremidade padrão podem ser adicionados no código ou na configuração. Para adicionar um ponto de extremidade padrão no código, basta instanciar o tipo de ponto de extremidade padrão apropriado e adicioná-lo ao host de serviço, conforme mostrado no exemplo a seguir:

serviceHost.AddServiceEndpoint(new CustomEndpoint());

Para adicionar um ponto de extremidade padrão na configuração, adicione um <endpoint> elemento ao <service> elemento e quaisquer definições de configuração necessárias no <standardEndpoints> elemento . O exemplo a seguir mostra como adicionar um UdpDiscoveryEndpoint, um dos pontos de extremidade padrão fornecidos com o .NET Framework 4.6.1.

<services>
  <service>
    <endpoint isSystemEndpoint="true" kind="udpDiscoveryEndpoint" />
  </service>
</services>
<standardEndpoints>
  <udpDiscoveryEndpoint>
     <standardEndpoint multicastAddress="soap.udp://239.255.255.250:3702" />
  </udpDiscoveryEndpoint>
</standardEndpoints>

O tipo de ponto de extremidade padrão é especificado usando o atributo kind no <endpoint> elemento . O ponto de extremidade é configurado dentro do <standardEndpoints> elemento . No exemplo acima, um ponto de UdpDiscoveryEndpoint extremidade é adicionado e configurado. O <udpDiscoveryEndpoint> elemento contém um <standardEndpoint> que define a MulticastAddress propriedade do UdpDiscoveryEndpoint.

Pontos de extremidade padrão fornecidos com o .NET Framework

A tabela a seguir lista os pontos de extremidade padrão fornecidos com o .NET Framework 4.6.1.

Mex Endpoint Um ponto de extremidade padrão que é usado para expor metadados de serviço.

AnnouncementEndpoint Um ponto de extremidade padrão que é usado pelos serviços para enviar mensagens de anúncio.

DiscoveryEndpoint Um ponto de extremidade padrão que é usado pelos serviços para enviar mensagens de descoberta.

UdpDiscoveryEndpoint Um ponto de extremidade padrão pré-configurado para operações de descoberta em uma associação de multicast UDP.

UdpAnnouncementEndpoint Um ponto de extremidade padrão que é usado pelos serviços para enviar mensagens de anúncio por meio de uma associação UDP.

DynamicEndpoint Um ponto de extremidade padrão que usa o WS-Discovery para localizar o endereço do ponto de extremidade dinamicamente em tempo de execução.

ServiceMetadataEndpoint Um ponto de extremidade padrão para a troca de metadados.

WebHttpEndpoint Um ponto de extremidade padrão com uma WebHttpBinding associação que adiciona automaticamente o WebHttpBehavior comportamento

WebScriptEndpoint Um ponto de extremidade padrão com uma WebHttpBinding associação que adiciona automaticamente o WebScriptEnablingBehavior comportamento.

WebServiceEndpoint Um ponto de extremidade padrão com uma WebHttpBinding ligação.

WorkflowControlEndpoint Um ponto de extremidade padrão que permite chamar operações de controle em instâncias de fluxo de trabalho.

WorkflowHostingEndpoint Um ponto de extremidade padrão que suporta a criação de fluxo de trabalho e a retomada de marcadores.