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.
Los servicios suelen publicar metadatos para habilitar la generación automática y la configuración de tipos de proxy de cliente. Cuando el servicio no es de confianza, las aplicaciones cliente deben validar que los metadatos se ajustan a la directiva de la aplicación cliente con respecto a la seguridad, las transacciones, el tipo de contrato de servicio, etc. En el ejemplo siguiente se muestra cómo escribir un comportamiento de punto de conexión de cliente que valida el punto de conexión de servicio para asegurarse de que el punto de conexión de servicio es seguro de usar.
El servicio expone cuatro puntos de conexión de servicio. El primer punto de conexión usa WSDualHttpBinding, el segundo punto de conexión usa la autenticación NTLM, el tercer punto de conexión habilita el flujo de transacciones y el cuarto punto de conexión usa la autenticación basada en certificados.
El cliente usa la MetadataResolver clase para recuperar los metadatos del servicio. El cliente implementa una política que prohíbe enlaces dúplex, autenticación NTLM y flujo de transacciones mediante un mecanismo de validación. Para cada instancia ServiceEndpoint importada de los metadatos del servicio, la aplicación cliente agrega una instancia del comportamiento de endpoint InternetClientValidatorBehavior
al ServiceEndpoint antes de intentar utilizar un cliente de Windows Communication Foundation (WCF) para establecer la conexión con el endpoint. El método Validate
de comportamiento se ejecuta antes de llamar cualquier operación en el servicio y exige la directiva del cliente iniciando InvalidOperationExceptions
.
Para compilar el ejemplo
- Para compilar la solución, siga las instrucciones que se indican en Compilación de los ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en el mismo equipo
Abra el Símbolo del sistema para desarrolladores de Visual Studio con privilegios de administrador y ejecute Setup.bat desde la carpeta de instalación del ejemplo. Esto instala todos los certificados necesarios para ejecutar el ejemplo.
Ejecute la aplicación de servicio desde \service\bin\Debug.
Ejecute la aplicación cliente desde \client\bin\Debug. La actividad de cliente se muestra en la aplicación de consola cliente.
Si el cliente y el servicio no pueden comunicarse, consulte Sugerencias de solución de problemas para ejemplos de WCF.
Quite los certificados ejecutando Cleanup.bat cuando haya terminado con el ejemplo. Otros ejemplos de seguridad usan los mismos certificados.
Para ejecutar el ejemplo entre equipos
En el servidor, en un Símbolo del sistema para desarrolladores de Visual Studio ejecutado con privilegios de administrador, escriba
setup.bat service
. La ejecución desetup.bat
con el argumentoservice
crea un certificado de servicio con el nombre de dominio completo del equipo y exporta el certificado de servicio a un archivo denominado Service.cer.En el servidor, edite App.config para reflejar el nuevo nombre del certificado. Es decir, cambie el atributo
findValue
del elemento <serviceCertificate> al nombre de dominio completo del equipo.Copie el archivo Service.cer del directorio de servicio en el directorio cliente del equipo cliente.
En el servidor, abra un Símbolo del sistema para desarrolladores de Visual Studio ejecutado con privilegios de administrador y escriba
setup.bat client
. La ejecuciónsetup.bat
con elclient
argumento crea un certificado de cliente denominado Client.com y exporta el certificado de cliente a un archivo denominado Client.cer.En el archivo client.cs, cambie el valor de la dirección del punto de conexión MEX y establezca
findValue
para que el certificado de servidor predeterminado coincida con la nueva dirección de su servicio. Para ello, reemplace localhost por el nombre de dominio completo del servidor. RebuildCopie el archivo Client.cer del directorio cliente en el directorio de servicio del servidor.
En el cliente, ejecute ImportServiceCert.bat desde el Símbolo del sistema para desarrolladores de Visual Studio con privilegios de administrador. Así se importa el certificado del servicio del archivo Service.cer en el almacén CurrentUser - TrustedPeople.
En el servidor, ejecute ImportClientCert.bat en el Símbolo del sistema para desarrolladores de Visual Studio con privilegios de administrador. Esto importa el certificado de cliente del archivo Client.cer en el almacén LocalMachine - TrustedPeople.
En el equipo de servicio, compile el proyecto de servicio en Visual Studio y ejecute service.exe.
En el equipo cliente, ejecute client.exe.
- Si el cliente y el servicio no pueden comunicarse, consulte Sugerencias de solución de problemas para ejemplos de WCF.
Para limpiar después de la muestra.
Ejecute Cleanup.bat en la carpeta samples una vez que haya terminado de ejecutar el ejemplo.
Nota:
Este script no quita certificados de servicio en un cliente al ejecutar este ejemplo entre equipos. Si ha ejecutado ejemplos de WCF que usan certificados entre equipos, asegúrese de borrar los certificados de servicio que se han instalado en el almacén CurrentUser - TrustedPeople. Para ello, use el siguiente comando:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
.