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
Usando o Visual Studio, abra o arquivo StandardEndpoints.sln.
Permita o arranque de vários projetos.
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.
Em Propriedades Comuns, selecione Projeto de Inicialização e clique em Vários Projetos de Inicialização.
Mova o projeto Service para o início da lista, com a Action definida como Start.
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.
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:
- Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
- Para criar a solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
- 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.