Partilhar via


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 pela funcionalidade personalizada ao examinar cada endpoint no serviço e verificar se contêm elementos de ligação segura. Este exemplo é baseado em Introdução.

Observação

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 método Validate contido na interface IServiceBehavior, pode ser dada um comportamento personalizado 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 final contido num serviço, que procura associações seguras nas suas coleções de associações.

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 comportamento serviceValidate para que o serviço reconheça.

<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 comportamento endpointValidate à lista de comportamentos do arquivo Web.config e, assim, 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.

Observação

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 gera uma exceção interna que descreve qual ponto de extremidade é inseguro e grava uma mensagem no Visualizador de Eventos do sistema sob a 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 falha na validação do ponto de extremidade no Visualizador de Eventos

  1. Clique no menu Iniciar e selecione Executar.

  2. Digite eventvwr e clique em OK.

  3. Na janela Visualizador de Eventos, clique em Aplicativo.

  4. 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

  1. Verifique se você executou o procedimento de instalação do One-Time para os exemplos do Windows Communication Foundation.

  2. 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.

  3. 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.

Ver também