Validação de segurança
O exemplo ServiceValidation demonstra como usar um comportamento personalizado para validar serviços em um computador para garantir que eles atendam a critérios específicos. Neste exemplo, os serviços são validados pelo comportamento personalizado examinando cada ponto de extremidade no serviço e verificando se eles contêm elementos de vinculação seguros. Este exemplo é baseado em Introdução.
Nota
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
Comportamento personalizado de validação de ponto final
Ao adicionar código de usuário ao Validate
método contido na interface, o IServiceBehavior comportamento personalizado pode ser dado a um serviço ou ponto de extremidade para executar ações definidas pelo usuário. O código a seguir é usado para percorrer cada ponto de extremidade contido em um serviço, que procura associações seguras em suas coleções de vinculação.
public void Validate(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
// Loop through each endpoint individually, gathering their
// binding elements.
foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints)
{
secureElementFound = false;
// Retrieve the endpoint's binding element collection.
BindingElementCollection bindingElements =
endpoint.Binding.CreateBindingElements();
// Look to see if the binding elements collection contains any
// secure binding elements. Transport, Asymmetric, and Symmetric
// binding elements are all derived from SecurityBindingElement.
if ((bindingElements.Find<SecurityBindingElement>() != null) || (bindingElements.Find<HttpsTransportBindingElement>() != null) || (bindingElements.Find<WindowsStreamSecurityBindingElement>() != null) || (bindingElements.Find<SslStreamSecurityBindingElement>() != null))
{
secureElementFound = true;
}
// Send a message to the system event viewer when an endpoint is deemed insecure.
if (!secureElementFound)
throw new Exception(System.DateTime.Now.ToString() + ": The endpoint \"" + endpoint.Name + "\" has no secure bindings.");
}
}
Adicionar o código a seguir ao arquivo Web.config adiciona a extensão de serviceValidate
comportamento para o serviço reconhecer.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
...
</system.serviceModel>
Uma vez que a extensão de comportamento é adicionada ao serviço, agora é possível adicionar o endpointValidate
comportamento à lista de comportamentos no arquivo Web.config e, portanto, ao serviço.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Os comportamentos e suas extensões que são adicionados ao arquivo Web.config aplicam o comportamento a serviços individuais, enquanto quando adicionados ao arquivo Machine.config aplicam o comportamento a cada serviço ativo no computador.
Nota
Ao adicionar comportamento a todos os serviços, sugere-se fazer backup do arquivo Machine.config antes de fazer qualquer alteração.
Agora execute o cliente fornecido no diretório client\bin deste exemplo. Uma exceção é lançada com a seguinte mensagem: "O serviço http://localhost/servicemodelsamples/service.svc
solicitado não pôde ser ativado". Isso é esperado porque um ponto de extremidade é considerado inseguro pelo comportamento de validação do ponto de extremidade e impede que o serviço seja iniciado. O comportamento também lança uma exceção interna que descreve qual ponto de extremidade é inseguro e grava uma mensagem no Visualizador de Eventos do sistema na fonte "System.ServiceModel 4.0.0.0" e na categoria "WebHost". Também é possível ativar o rastreamento no serviço neste exemplo. Isso permite que o usuário visualize as exceções geradas pelo comportamento de validação do ponto de extremidade abrindo os rastreamentos de serviço resultantes usando a ferramenta Visualizador de Rastreamento de Serviço.
Exibir mensagens de exceção de validação de ponto de extremidade com falha no Visualizador de Eventos
Clique no menu Iniciar e selecione Executar.
Digite
eventvwr
e clique em OK.Na janela Visualizador de Eventos, clique em Aplicativo.
Clique duas vezes no evento "System.ServiceModel 4.0.0.0" recentemente adicionado na categoria "WebHost" na janela Aplicativo para exibir mensagens de ponto de extremidade inseguras.
Configurar, compilar e executar o exemplo
Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.