Validación de seguridad
Este ejemplo muestra cómo utilizar un comportamiento personalizado para validar los servicios en un equipo a fin de asegurarse de que cumplen los criterios específicos. En este ejemplo, el comportamiento personalizado valida estos servicios analizando cada extremo en el servicio y comprobando para ver si contienen elementos de enlace seguros. Este ejemplo se basa en el Ejemplo de introducción.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Comportamiento personalizado de validación del extremo
Al agregar código de usuario al método Validate contenido en la interfaz IServiceBehavior, se puede dar el comportamiento personalizado a un servicio o extremo para realizar las acciones definidas por el usuario. El código siguiente se utiliza para recorrer a través de cada extremo contenido en un servicio, que busca en las colecciones de enlaces los enlaces seguros.
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.");
}
}
Al agregar el código siguiente al archivo Web.config, se agrega la extensión de comportamiento serviceValidate para que el servicio la reconozca.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
...
Una vez agregada al servicio la extensión de comportamiento, ahora es posible agregar el comportamiento endpointValidate a la lista de comportamientos en el archivo Web.config y así al servicio.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Los comportamientos y las extensiones que se agregan al archivo Web.config aplican el comportamiento a los servicios individuales, mientras que cuando se agrega al archivo Machine.config se aplica comportamiento a cada servicio activo en el equipo.
Nota
Al agregar el comportamiento a todos los servicios, se sugiere hacer una copia de seguridad del archivo Machine.config antes de realizar cualquier modificación.
Ahora ejecute el cliente proporcionado en el directorio client\bin de este ejemplo. Se ha producido una excepción con el mensaje siguiente: "No se pudo activar el servicio solicitado, 'https://localhost/servicemodelsamples/service.svc'". Se espera este mensaje porque el comportamiento que valida el extremo considera inseguro al extremo y evita que se inicie el servicio. El comportamiento también produce una excepción interna que describe qué extremo es inseguro y escribe un mensaje en el visor de eventos en el origen "System.ServiceModel 3.0.0.0" y la categoría "WebHost". También es posible para activar el seguimiento en el servicio de este ejemplo. Esto le permite al usuario ver las excepciones iniciadas por el comportamiento que valida el extremo abriendo los seguimientos de servicio resultantes mediante la herramienta Service Trace Viewer.
Para ver los mensajes de excepción de validación del extremo en el visor de eventos
Haga clic en el menú Inicio y seleccione Ejecutar.
Escriba eventvwr y haga clic en Aceptar.
En la ventana Visor de eventos, haga clic en Aplicación.
Haga doble clic en el evento "System.ServiceModel 3.0.0.0" recientemente agregado situado debajo de la categoría "WebHost" en la ventana Aplicación para ver los mensajes inseguros del extremo.
Para configurar, generar y ejecutar el ejemplo
Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.