Condividi tramite


Convalida della protezione

In questo esempio viene illustrato come utilizzare un comportamento personalizzato per convalidare i servizi in un computer allo scopo di verificare che soddisfino criteri specifici. In questo esempio, i servizi vengono convalidati dal comportamento personalizzato mediante l'analisi di ogni endpoint nel servizio e verificando se contengono elementi di associazione protetti. Questo esempio è basato sull'Esempio della guida introduttiva.

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine dell'argomento.

Comportamento personalizzato di convalida dell'endpoint

Aggiungendo il codice utente al metodo Validate contenuto nell'interfaccia IServiceBehavior, il comportamento personalizzato può essere assegnato a un servizio o a un endpoint per eseguire azioni definite dall'utente. Il codice seguente viene utilizzato per eseguire un ciclo in ogni endpoint contenuto in un servizio allo scopo di esaminare gli insiemi di associazioni per individuare le associazioni protette.

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.");
    }
}

L'aggiunta del codice seguente a file Web.config aggiunge l'estensione del comportamento serviceValidate affinché venga riconosciuta dal servizio.

<system.serviceModel>
    <extensions>
        <behaviorExtensions>
            <add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </behaviorExtensions>
    </extensions>
...

Quando l'estensione del comportamento è stata aggiunta al servizio, è possibile aggiungere il comportamento endpointValidate all'elenco dei comportamenti nel file Web.config e, di conseguenza, al servizio.

    <behaviors>
        <serviceBehaviors>
            <behavior name="CalcServiceSEB1">
                <serviceMetadata httpGetEnabled="true" />
                <endpointValidate />
            </behavior>
        </serviceBehaviors>
    </behaviors>

I comportamenti e le estensioni aggiunte al file Web.config applicano il comportamento ai singoli servizi, mentre se vengono aggiunti al file Machine.config applicano il comportamento a ogni servizio attivo nel computer.

Nota

Quando si aggiunge il comportamento a tutti i servizi, è consigliabile eseguire il backup del file Machine.config prima di apportare qualsiasi modifica.

Eseguire quindi il client fornito nella directory client\bin di questo esempio. Si verifica un'eccezione con il messaggio seguente: "Impossibile attivare il servizio richiesto, 'https://localhost/servicemodelsamples/service.svc'." Si tratta di un problema previsto poiché un endpoint viene considerato non protetto dall'endpoint che convalida il comportamento e impedisce l'avvio del servizio. Il comportamento genera anche un'eccezione interna che descrive quale endpoint non è protetto e scrive un messaggio nel visualizzatore eventi di sistema nell'origine "System.ServiceModel 3.0.0.0", categoria "WebHost". È anche possibile attivare la traccia nel servizio in questo esempio. Questa operazione consente all'utente di visualizzare le eccezioni generate dall'endpoint che convalida il comportamento aprendo le tracce del servizio risultanti mediante il visualizzatore di tracce dei servizi.

Per visualizzare i messaggi di eccezione relativi alla convalida degli endpoint con errori nel visualizzatore eventi

  1. Fare clic sul menu Start e selezionare Esegui….

  2. Digitare eventvwr e scegliere OK.

  3. Nella finestra del visualizzatore eventi fare clic su Applicazione.

  4. Fare doppio clic sull'evento "System.ServiceModel 3.0.0.0" recentemente aggiunto sotto la categoria "WebHost" nella finestra Applicazione per visualizzare i messaggi dell'endpoint non protetto.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di avere eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.

  3. Per eseguire l'esempio su un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.