none
Problème de chargement d'une propriété de UserProfile custom (type ManagedMetaData) RRS feed

  • Discussion générale

  • Bonjour à tous,

    J'ai récement rencontré un soucis assez étrange et j'aimerais savoir si quelqu'un à déjà eu ce comportement :

    J'ai crée une managed metadata propriété custom à mes profils utilisateurs, via central admin / user profile application. Cette propriété pointe sur un TermSet custom.

    Pour récupérer la valeur de cette propriété sur un profile utilisateur X, j'utilise un code tout ce qu'il y a de plus "classique" à base de UserProfileManager, puis je recupère par le login une instance de UserProfile, dessus j'attrape la property en utilisant l'indexeur ; ["NomDeLaProd"], puis méthode GetTaxonomyTerms().

    Bref ça fonctionne bien depuis un moment sur mon serveur "standalone".

    Et j'ai donc remarqué sur ma ferme de testing, composée de 2 frontaux, un applicatif et un sql, que si j'utilisais ce code tout de suite après un redémarrage des services (genre après un IISreset), je récupérais un TermSet vide.

    Si je refais l'appel quelques minutes après, je recupère bien les valeurs  (des Terms)...

    Ce qui est génant, c'est que je n'ai pas vraiment la maitrise de ces "quelques minutes" de "préchargement" :(

    On dirait un soucis de lazy loading ou de communication entre le service de UserProfile et ManagedMetaData... Pour le moment je n'ai rien trouvé de parlant dans le log ULS...

    une idée pour forcer les chargement des properties du USerProfile ?

    Merci

    mercredi 28 mars 2012 20:37

Toutes les réponses

  • Bonjour Lionel,

    Je pense avoir déjà vu quelque chose de similaire. Le problème survenait sur des contenus utilisant des Term Sets, uniquement après un IISReset et sur un environnement en load balancing.

    Le journal d'applications Windows du serveur comportait ce message :

    Topology 18 8312 SharePoint Web Services Round Robin Service Load Balancer Event: Initialization
    Process Name: w3wp
    Process ID: 2680
    AppDomain Name: /LM/W3SVC/371863898/ROOT-1-129599899861087054
    AppDomain ID: 2
    Service Application Uri: urn:schemas-microsoft-com:sharepoint:service:9496b08305a64c4db5bdc7f2b920de66#authority=urn:uuid:382aff9cd59e4f75ac601b01882635eb&authority=https://servername:32844/Topology/topology.svc
    Active Endpoints: 1
    Failed Endpoints: 0
    Endpoint List:
    http://servername:32843/9496b08305a64c4db5bdc7f2b920de66/MetadataWebService.svc
    

    Le "developer dashboard" remontait également un message mentionnant le service topology.svc dans la rubrique "Asserts and Critical Events" (uniquement après un IISReset). A priori, le service ne répond pas assez vite après le IISReset et un TimeOut se produit.

    J'ai rencontré ce message au cours d'un audit et je n'ai malheureusement pas eu l'occasion de tenter des résolutions.

    Peut être que les termes "Round Robin", "MetadataWebService.svc", "Topology.svc" et 8312 te donneront déjà quelques pistes.


    Sébastien PICAMELOT - http://blogs.developpeur.org/gribouillon/

    vendredi 30 mars 2012 09:27
    Modérateur
  • Salut Sébastien

    Merci beaucoup pour ces pistes, je vais fouiller un peu tout ça la semaine prochaine et je reviendrais donner des news !

    Ce qui me "gène" dans l'histoire c'est surtout que la récupération du contenu du TermSet ne part pas en erreur mais renvoi une donnée "correcte" sauf qu'elle est vide, et un peu après sur un second appel on récupère des valeurs. C'est surtout lourd à gérer quand tu mets en cache la donnée suite au 1er appel ... ;)

    vendredi 30 mars 2012 09:38
  • Re,

    J'ai effectivement le EventLog signalé par Sébastien :

    EventID : 8313
    SharePoint Web Services Round Robin Service Load Balancer Event: EndpointFailure
    Process Name: TestPerfsUserProfileAPI
    Process ID: 324
    AppDomain Name: TestPerfsUserProfileAPI.exe
    AppDomain ID: 1
    Service Application Uri: urn:schemas-microsoft-com:sharepoint:service:e7beb7c990da48b4ac18a25369988cc4#authority=urn:uuid:4f15a475b056485db86b28129a79dfcf&authority=https://xxxxxx:32844/Topology/topology.svc
    Active Endpoints: 1
    Failed Endpoints:1
    Affected Endpoint: http://xxxxxx:32843/e7beb7c990da48b4ac18a25369988cc4/MetadataWebService.svc

    et dans l'ULS j'ai aussi ce message très clair :

    Failed to get term store for proxy 'Managed Metadata Service'. Exception: System.TimeoutException: The request channel timed out while waiting for a reply after 00:00:09.9999999. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout. ---> System.TimeoutException: The HTTP request to 'http://xxxx:32843/e7beb7c990da48b4ac18a25369988cc4/MetadataWebService.svc' has exceeded the allotted timeout of 00:00:09.9990000. The time allotted to this operation may have been a portion of a longer timeout. ---> System.Net.WebException: The operation has timed out   
     at System.Net.HttpWebRequest.GetResponse()   
     at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)     -
     -- End of inner exception stack trace ---   
     at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)   
     at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)   
     at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)     -
     -- End of inner exception stack trace ---    Server stack trace:    
     at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)   
     at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)   
     at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)   
     at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)   
     at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)   
     at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)    Exception rethrown
     at [0]:    
     at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)   
     at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)   
     at Microsoft.SharePoint.Taxonomy.IMetadataWebServiceApplication.GetServiceSettings(Guid rawPartitionId)   
     at Microsoft.SharePoint.Taxonomy.MetadataWebServiceApplicationProxy.<>c__DisplayClass2f.<ReadApplicationSettings>b__2e(IMetadataWebServiceApplication serviceApplication)   
     at Microsoft.SharePoint.Taxonomy.MetadataWebServiceApplicationProxy.<>c__DisplayClass2c.<RunOnChannel>b__2b()   
     at Microsoft.Office.Server.Security.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)   
     at Microsoft.SharePoint.Taxonomy.MetadataWebServiceApplicationProxy.<>c__DisplayClass2c.<RunOnChannel>b__2a()   
     at Microsoft.Office.Server.Utilities.MonitoredScopeWrapper.RunWithMonitoredScope(Action code)   
     at Microsoft.SharePoint.Taxonomy.MetadataWebServiceApplicationProxy.RunOnChannel(CodeToRun codeToRun, Double operationTimeoutFactor)   
     at Microsoft.SharePoint.Taxonomy.MetadataWebServiceApplicationProxy.ReadApplicationSettings(Guid rawPartitionId)   
     at Microsoft.SharePoint.Taxonomy.MetadataWebServiceApplicationProxy.GetTermStoreId(Guid rawPartitionId)   
     at Microsoft.SharePoint.Taxonomy.Internal.DataAccessManager.GetTermStoreData(MetadataWebServiceApplicationProxy sharedServiceProxy)

     Ce qui est problématique c'est donc que l'erreur est manifestement trappé par la couche UserProfile dans mon cas et que du coup mon code crois que ça a marché alors que non... :(

    J'ai envoyé un bug sur Connect, vous pouvez voter dessus : https://connect.microsoft.com/site470/feedback/details/735176/sharepoint-2010-managedmetadata-userprofile-property-bug-when-retrieving-value-just-after-iisreset

    J'ai peu d'espoir sur un quelconque workaround ou correctif vu la spécificité de ce cas....

     

    mardi 3 avril 2012 09:02
  • I too am getting this error. It occurs once to 5 times a day.

    Did you find a solution?

    +Tony


    Please click "Propose As Answer" if a post solves your problem or "Vote As Helpful" if a post has been useful to you.

    jeudi 23 août 2012 21:31
  • no solution, and I've check on the latest beta of SharePoint 2013 and can reproduce the same behavior :(

    This is a bug for me :) 

    maybe you can vote on the connect site here https://connect.microsoft.com/site470/feedback/details/735176/sharepoint-2010-managedmetadata-userprofile-property-bug-when-retrieving-value-just-after-iisreset

    (be carefull that you are on a French Forum, so please wrote in French if possible)


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel

    vendredi 24 août 2012 12:11
  • Merci Bonnhomme Lionel!

    Please click "Propose As Answer" if a post solves your problem or "Vote As Helpful" if a post has been useful to you.

    vendredi 24 août 2012 13:24
  • J'ai du nouveau sur cette erreur.

    J'ai eu un comportement similaire mais même sur la ferme en route depuis un moment... En gros la récupération de la méta était "aléatoirement" à null ou à la bonne valeur.

    Ce que j'ai découvert c'est que la propriété de profil correspondante était passée en mode "only me" sur sa visibilité (config de la proprité de UserProfile). La passer en "everyone" à semble-t-il réglé le problème.

    Ce que je n'explique pas c'est pourquoi parfois alors je récupérais une valeur ? si elle est privée, elle est privée tout le temps ! A croire que la propriété n'était pas configurée pareil sur les 2 frontaux... ou bien que mon code était executé parfois sous l'identé du USerPRofile en question et parfois le compte du pool d'application (pourtant j'ai un RunWithElevatedPrivilege autour de ce code)....


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel

    samedi 15 septembre 2012 21:06
  • SP 2010 , SP 1 , October 2012 CU and seeing the same problem

    Topology 18 8312 SharePoint Web Services Round Robin Service Load Balancer Event: Initialization
    Process Name: w3wp
    Process ID: 2680
    AppDomain Name: /LM/W3SVC/371863898/ROOT-1-129599899861087054
    AppDomain ID: 2
    Service Application Uri: urn:schemas-microsoft-com:sharepoint:service:9496b08305a64c4db5bdc7f2b920de66#authority=urn:uuid:382aff9cd59e4f75ac601b01882635eb&authority=https://servername:32844/Topology/topology.svc
    Active Endpoints: 1
    Failed Endpoints: 0
    Endpoint List:
    http
    ://servername:32843/9496b08305a64c4db5bdc7f2b920de66/MetadataWebService.svc

    mercredi 9 janvier 2013 11:20