Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo ServiceValidation se muestra cómo usar un comportamiento personalizado para validar los servicios de un equipo para asegurarse de que cumplen criterios específicos. En este ejemplo, el comportamiento personalizado valida los servicios mediante el escaneo de cada uno de los puntos de conexión del servicio y comprueba si contienen elementos vinculantes seguros. Este ejemplo se basa en la 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 punto de conexión
Al agregar código de usuario al Validate método contenido en la interfaz, se puede proporcionar un comportamiento personalizado a un servicio o punto de conexión para realizar acciones definidas por el IServiceBehavior 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 a Web.config archivo, se agrega la serviceValidate extensión de comportamiento para que el servicio 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>
...
</system.serviceModel>
Una vez agregada la extensión de comportamiento al servicio, ahora es posible agregar el endpointValidate comportamiento a la lista de comportamientos del archivo Web.config y, por tanto, al servicio.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Los comportamientos y sus extensiones que se agregan al archivo Web.config aplican el comportamiento a los servicios individuales, mientras que cuando se agregan al archivo Machine.config aplican el comportamiento a cada servicio activo en el equipo.
Nota:
Al agregar el comportamiento a todos los servicios, se recomienda realizar una copia de seguridad del archivo Machine.config antes de realizar cualquier cambio.
Ahora ejecute el cliente proporcionado en el directorio client\bin de este ejemplo. Se produce una excepción con el siguiente mensaje: "No se pudo activar el servicio http://localhost/servicemodelsamples/service.svc solicitado". Esto se espera porque el comportamiento de validación del punto de conexión considera que un punto de conexión no es seguro e impide que se inicie el servicio. El comportamiento también produce una excepción interna que describe qué punto de conexión no es seguro y escribe un mensaje en el Visor de eventos del sistema en el origen "System.ServiceModel 4.0.0.0" y la categoría "WebHost". También es posible activar el seguimiento en el servicio en este ejemplo. Esto permite al usuario ver las excepciones producidas por el comportamiento de validación de puntos de conexión abriendo los seguimientos de servicio resultantes mediante la herramienta Visor de seguimiento de servicio.
Visualizar mensajes de excepción por validación fallida de puntos de conexión en el Visor de eventos
Haga clic en el menú Inicio y seleccione Ejecutar.
Escriba
eventvwry haga clic en Aceptar.En la ventana Visor de eventos, haga clic en Aplicación.
Haga doble clic en el evento "System.ServiceModel 4.0.0.0" agregado recientemente en la categoría "WebHost" de la ventana Aplicación para ver mensajes de punto de conexión no seguros.
Configuración, compilación y ejecución del ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.
Para ejecutar el ejemplo en una configuración de una máquina única o entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.