“An error occurred when updating a property” mapeando atributos de AD en User Profile Service de SharePoint 2010

20.12.11 / Comments (0) / by Enric Carrión

Creando propiedades de usuario en el User Profile Service que están mapeadas a atributos del Directorio Activo, podemos encontrarnos con que, al definir un mapping y guardar la propiedad nos de error, sin más explicación: “An error occurred when updating a property.

image

La operación ha producido eventos de los servicios de Forefront Identity Manager (FIM) en el Visor de sucesos, pero son demasiado crípticos como para dar pistas claras. Los reproduzco en su totalidad para quién busque similitudes (siento la enorme longitud).

Log Name:      Application
Source:        FIMSynchronizationService
Date:          19/12/2011 17:50:53
Event ID:      6306
Task Category: (3)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      SV-PUIGINTRA.PUIGINTRA.local
Description:
The server encountered an unexpected error while performing an operation for the client.
 
"BAIL: MMS(3140): mastate.cpp(11174): 0x8023060f (The version identifier passed in is not the latest)
BAIL: MMS(3140): server.cpp(4068): 0x8023060f (The version identifier passed in is not the latest)
Forefront Identity Manager 4.0.2450.34"
Event Xml:
<Event xmlns="
http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="FIMSynchronizationService" />
    <EventID Qualifiers="49152">6306</EventID>
    <Level>2</Level>
    <Task>3</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2011-12-19T16:50:53.000000000Z" />
    <EventRecordID>5937</EventRecordID>
    <Channel>Application</Channel>
    <Computer>SV-PUIGINTRA.PUIGINTRA.local</Computer>
    <Security />
  </System>
  <EventData>
    <Data>BAIL: MMS(3140): mastate.cpp(11174): 0x8023060f (The version identifier passed in is not the latest)
BAIL: MMS(3140): server.cpp(4068): 0x8023060f (The version identifier passed in is not the latest)
Forefront Identity Manager 4.0.2450.34</Data>
  </EventData>
</Event>

Log Name:      Application
Source:        Forefront Identity Manager
Date:          19/12/2011 17:47:21
Event ID:      3
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      XXXXXXXX
Description:
Microsoft.ResourceManagement: Microsoft.ResourceManagement.ResourceManagementException: Exception from HRESULT: 0x8023060F ---> System.Runtime.InteropServices.COMException (0x8023060F): Exception from HRESULT: 0x8023060F
   at MIISRCW.IMMSServer.SetMVData(String pszMVDataXML)
   at Microsoft.ResourceManagement.SyncConfig.ModifyMVData(String mvDataXml)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.Update(Guid objectId, CultureInfo locale, IList`1 updateParameters, Guid cause)
   --- End of inner exception stack trace ---
   at Microsoft.ResourceManagement.Utilities.ExceptionManager.ThrowException(Exception exception)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.Update(Guid objectId, CultureInfo locale, IList`1 updateParameters, Guid cause)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.ProcessInputRequest(RequestType request)
   at Microsoft.ResourceManagement.ActionProcessor.ActionDispatcher.ProcessInputRequest(RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.ExecuteAction(RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.ExecuteAction[ResponseBodyType](RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest[ResponseBodyType](RequestType request, Guid requestIdentifier, Object redispatchSingleInstanceKey)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest[ResponseBodyType](RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest(RequestType request)
   at Microsoft.ResourceManagement.WebServices.ResourceManagementService.Put(Message request)
Event Xml:
<Event xmlns="
http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Forefront Identity Manager" />
    <EventID Qualifiers="0">3</EventID>
    <Level>2</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2011-12-19T16:47:21.000000000Z" />
    <EventRecordID>5933</EventRecordID>
    <Channel>Application</Channel>
    <Computer>XXXXXXXX</Computer>
    <Security />
  </System>
  <EventData>
    <Data>Microsoft.ResourceManagement: Microsoft.ResourceManagement.ResourceManagementException: Exception from HRESULT: 0x8023060F ---&gt; System.Runtime.InteropServices.COMException (0x8023060F): Exception from HRESULT: 0x8023060F
   at MIISRCW.IMMSServer.SetMVData(String pszMVDataXML)
   at Microsoft.ResourceManagement.SyncConfig.ModifyMVData(String mvDataXml)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.Update(Guid objectId, CultureInfo locale, IList`1 updateParameters, Guid cause)
   --- End of inner exception stack trace ---
   at Microsoft.ResourceManagement.Utilities.ExceptionManager.ThrowException(Exception exception)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.Update(Guid objectId, CultureInfo locale, IList`1 updateParameters, Guid cause)
   at Microsoft.ResourceManagement.ActionProcessor.SyncConfigActionProcessor.ProcessInputRequest(RequestType request)
   at Microsoft.ResourceManagement.ActionProcessor.ActionDispatcher.ProcessInputRequest(RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.ExecuteAction(RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.ExecuteAction[ResponseBodyType](RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest[ResponseBodyType](RequestType request, Guid requestIdentifier, Object redispatchSingleInstanceKey)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest[ResponseBodyType](RequestType request)
   at Microsoft.ResourceManagement.WebServices.RequestDispatcher.DispatchRequest(RequestType request)
   at Microsoft.ResourceManagement.WebServices.ResourceManagementService.Put(Message request)</Data>
  </EventData>
</Event>

Me dirijo a la referencia más clara respecto a mapeos de propiedades de AD con propiedades de usuario, que es:

http://blogs.msdn.com/b/tehnoonr/archive/2010/11/22/mapping-user-profile-properties-in-sharepoint-2010-to-ldap-attributes.aspx

Ahí, ejecuto el script PowerShell de mapeo entre propiedad de AD/FIM y SharePoint que proporciona Tehnoon Raza. En el método AddNewMapping, se produce una excepción con mensaje “Unable to process Put message”, que provoca los mismos eventos en el Visor de sucesos.

El autor nos dice que, para este caso, comprobemos que la propiedad de AD está expuesta en FIM usando el Forefront Service Manager (miisclient.exe). Nota: para ejecutarlo deberéis hacerlo con runas y con las credenciales que tengáis configuradas en los servicios “Forefront Identity Manager Service” y “Forefront Identity Manager Synchronization Service” (típicamente la cuenta de granja de SharePoint). Ejecuto el Manager pero: chasco. La propiedad está ahí, disponible, vivita y coleando. Camino cerrado.

Y de pronto… destello de lucidez. ¿Permisos? La cuenta de servicio de los servicios de FIM es mi cuenta de granja de SharePoint, y recuerdo que para provisionar el User Profile Service, dicha cuenta debe ser “ascendida” al grupo de administradores locales del servidor. Remember: http://sharejoint.blogspot.com/2011/10/user-profile-synchronization-service-de.html

Actúo resolutiva y firmemente: añado mi cuenta de granja de SharePoint a administradores locales del servidor y reinicio el “SharePoint 2010 Timer” (OWSTIMER). ¿Suficiente? Aún no. Reinicio el User Profile Synchronization Service en Services on server. ¿Suficiente? ¡Sí! ¡Ya puedo añadir mapeos!

Resumen de la solución:

  • Establecer cuenta de los servicios “Forefront Identity Manager Service” y “Forefront Identity Manager Synchronization Service” como administrador local
  • Reiniciar servicio “SharePoint 2010 Timer”
  • Reiniciar “User Profile Synchronization Service” desde Services on server

 

Una vez añadidos los mapeos, tened en cuenta que habría que revertir el cambio y volver a quitar esa cuenta de admnistradores locales.

Espero que toda esta odisea os sirva como guía de troubleshooting para fenómenos similares en vuestros entornos.