El servicio de perfiles de SharePoint provee de una capa en la que aglutinar datos acerca de los usuarios proveniente de distintos orígenes. Lo más habitual es importar los perfiles de un AD para luego explotarlo desde el resto de funcionalidades de colaboración y búsqueda de SharePoint. También es posible extender lo perfiles con propiedades que provengan de un origen externo a través de BCS o incluso de disponer de propiedades que solo se almacenarán en SharePoint.
El servicio de perfiles consiste en una aplicación de servicio de SharePoint que utiliza Microsoft ForeFront Identity Manager para mantener la integridad de los perfiles. La aplicación utiliza dos instancias de servicio: User Profile Service para dar servicio básico del servicio y User Profile Synchronization Service para la importación de perfiles. La importación de los perfiles y la comparación con los datos Delta para detectar modificaciones es una operación costosa (dependiendo del volumen de usuarios y atributos) por lo que el proceso de importación utiliza por debajo un job de SharePoint.
ForeFront Identity Manager a su vez utiliza dos servicios de Windows para realizar las operaciones de conexión y mantenimiento de datos Delta. A su vez está compuesto de dos servicios de Windows encargados del proceso de sincronización de perfiles con AD: Forefront Identity Manager Service y Forefront Identity Manager Synchronization Service. No inicies ni modifiquéis manualmente los servicios ya que es la propia aplicación de servicio la encargada de hacerlo.
La configuración del servicio es igual de compleja que su arquitectura, por lo que es muy encontrar algún tipo de problemas al intentar configurarlo. La mayoría de los errores son por falta de permisos.
En esta ocasión me encontré al arrancar la instancia de servicio de sincronización de perfiles con un error en el log de Windows del tipo “.Net SqlClient Data Provider: System.Data.SqlClient.SqlException: HostId is not registered”. después de verificar todas las configuraciones y permisos llegué al post “User Profile Synchronization Service won’t start with Event ID 3” que explicaba la necesidad de configurar el Proxy en el servicio de perfiles. La solución consistió en configurar en todos los componentes del servicio de perfiles una entrada “bypasslist” en la que indicar las direcciones que no requerirán de proxy para resolverse.
De este modo, si mi dominio es “es.midominio.com” y el rango de proxys disponibles es “10.50.*.*” la configuración sería del siguiente modo:
- Modificar el fichero owstimer.web.config para que el job de sincronización que se ejecuta en el contexto del Servicio de temporizador de SharePoint (SharePoint 2010 Timer).
<?xml version=»1.0″ encoding=»utf-8″ ?> <configuration> <runtime> </runtime> <system.net> <defaultProxy> <bypasslist> <add address=»es.midominio.com» /> <add address=»10.50..*» /> </bypasslist> </defaultProxy> </system.net> </configuration>
|
- Modificar el fichero web.config de la Administración Central de SharePoint y añadir la siguiente entrada. Esto es necesario para poder iniciar la importación.
<system.net> <defaultProxy> <bypasslist> <add address=»es.midominio.com» /> <add address=»10.50..*» /> </bypasslist> </defaultProxy> </system.net>
|
- Añadir la misma entrada en los ficheros de configuración del servicio y el cliente de ForeFront ubicados en:
- C:Program FilesMicrosoft Office Servers14.0Synchronization ServiceBinMIIServer.exe.config
- C:Program FilesMicrosoft Office Servers14.0Synchronization ServiceUIShellMIISClient.exe.config
Una vez modificados los ficheros:
- iisreset
- Reiniciar el servicio SharePoint 2010 Timer
- Forefront Identity Manager Service
- Forefront Identity Manager Synchronization Service
Si se ha realizado la modificación de estos ficheros después de haber creado la aplicación de servicio de perfiles, habrá que quitar la provisión del servicio de sincronización borrando la aplicación de servicios o mediante los siguientes scripts de PowerShell para luego volverla a provisionar:
$syncdb=Get-SPDatabase -Id <GUID of User Profile Sync DB> $syncdb.Unprovision() $syncdb.Status=’Offline’ $upa=Get-SPServiceApplication -Id <GUID of User Profile Service> $upa.ResetSynchronizationMachine() $upa.ResetSynchronizationDatabase() $syncdb.Provision()
|
Una vez provisionado el servicio si ha ido todo correctamente al entrar en la configuración de la aplicación nos debe indicar que se encuentra en estado “Idle”. La instancia de servicio de sincronización suele tardar unos 15 minutos en iniciarse por lo que os recomiendo paciencia. Para aseguraros que se está iniciando correctamente el servicio podéis revisar la carga del procesador y el log de Windows.
Espero que os sirva de ayuda!!!