2009-04-13 6 views
3

Nous avons une solution que nous avons élaborée pour une batterie MOSS dont une inclut un travail de minuteur. Ce travail a fonctionné très bien pendant des mois. Récemment, l'administrateur a enrôlé un autre serveur dans la batterie et notre travail de minuteur a démarré automatiquement sur cette nouvelle machine. Dès que ce changement s'est produit, notre travail de minuteur a commencé à produire l'erreur ci-dessous (trouvée dans les journaux SP). Au début, je pensais que c'était un problème de droits, mais le service de minuterie sur la machine où il travaillait auparavant et le nouveau fonctionnent sous le même compte de domaine. Cela semble échouer lors de la mise en boucle de la liste de sites dans une collection de sites, sur l'un des sites/sites Web (extrait de code ci-dessous). Je sais que ce compte de domaine a accès à cela parce qu'il fonctionne sur l'autre boîte sous le même compte. Quelqu'un at-il des idées sur la raison de cette erreur cryptique? Ou si une procédure spéciale doit être effectuée sur cette nouvelle machine pour s'assurer qu'elle dispose des LCA appropriées pour toutes les bases de données de la batterie MOSS?Site MOSS 2007 dans une exception d'initialisation de type de batterie

code:

public static void Main(string[] args) 
{ 
    SPSecurity.RunWithElevatedPrivileges(delegate() { setInputParameters(); }); 
} 

private static void setInputParameters() 
{ 
    SPFarm farm = SPFarm.Local; 
    SPWebService service = farm.Services.GetValue<SPWebService>(""); 
    foreach (SPWebApplication webApp in service.WebApplications) 
    { 
     foreach (SPSite siteCollection in webApp.Sites) 
     { 
      using(siteCollection) 
      { 
       siteCollection.CatchAccessDeniedException = false; 

       try 
       { 
/* Here is the line that it fails on */ 
        foreach (SPWeb web in siteCollection.AllWebs) 

Exception:

The Execute method of job definition LMSDataImport (ID 4b37b285-ef8a-407c-8652-391639449790) threw an exception. 
More information is included below. 
The type initializer for 'Microsoft.SharePoint.Administration.SPPersistedObjectCollection`1' threw an exception. 

Exception stack trace:  

at Microsoft.SharePoint.Administration.SPPersistedObjectCollection`1.get_BackingList()  
at Microsoft.SharePoint.Administration.SPPersistedObjectCollection`1.GetEnumerator()  
at Microsoft.SharePoint.Administration.SPAlternateUrlCollectionManager.LookupAlternateUrl(Uri canonicalRequestUri)  
at Microsoft.SharePoint.Administration.SPAlternateUrl.LookupCore(Uri uri, SPFarm farm)  
at Microsoft.SharePoint.Administration.SPWebApplication.Lookup(SPFarm farm, Uri requestUri, Boolean fallbackToHttpContext, SPAlternateUrl& alternateUrl, SiteMapInfo& hostHeaderSiteInfo, Boolean& lookupRequiredContext)  
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)  
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite)  
at Microsoft.SharePoint.Administration.SPSiteCollection.get_Item(String strSiteName)  
at Microsoft.SharePoint.Administration.SPSiteCollection.get_Item(Int32 index)  
at Microsoft.SharePoint.Administration.SPSiteCollection.ItemAtIndex(Int32 iIndex)  
at Microsoft.SharePoint.SPBaseCollection.SPEnumerator.System.Collections.IEnumerator.get_Current()  
at LMSDataImporter.setInputParameters()  
at Microsoft.SharePoint.SPSecurity.CodeToRunElevatedWrapper(Object state)  
at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()  
at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)  
at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)  
at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)  
at Axian.AxianCalendar.LMSDataImporter.Main(String[] args)  
at Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke(TimerJobExecuteData& data, Int32& result)  
+0

Quel est le type de l'exception? –

+0

il s'agit d'une exception TypeInitializerException. Il semble qu'il provienne d'un problème d'accès au niveau SQL au contenu db. Mais comme je l'ai dit plus haut, le service de minuterie fonctionne sous un compte de domaine avec des privilèges suffisants.Je le sais parce que je me suis connecté au studio de gestion SQL avec ce compte et que j'ai pu accéder à tout ce qui se trouve dans le contenu de la base de données. – James

+0

Avez-vous de la chance d'essayer de déboguer ou de regarder dans l'exception interne? C'est là que la vraie information sera. –

Répondre

4

Vérifiez les DLL pour SharePoint, faire tout existe et tous sont la même version? Essayez de mettre un catch pour l'exception TypeInitializationException et voyez ce qui ne va pas dans cette exception.

+0

+1 Ils (les admins) ont dit que ce nouveau serveur est un clone donc il devrait avoir les mêmes versions de dll, mais je vais certainement vérifier cela. – James

+0

Les DLL ont-elles été extraites? Qu'est-ce que l'exception interne a dit? Je ne suis certainement pas un expert dans SharePoint, mais en regardant à nouveau votre trace de pile, peut-être que rien ne se passe dans le site. Pouvez-vous mettre des points de rupture là-bas et voir que vous obtenez la Ferme/WebApp/Site correcte (remplie)? –

+0

Les dll sont les mêmes, et je n'ai aucun moyen de faire un débogage à distance sans beaucoup de tracas. J'espère juste qu'il y a une réponse plus simple! SharePoint peut être une telle douleur parfois ... – James

1

Une exception d'initialisation de type signifie simplement qu'une exception s'est produite dans le fichier .ctor de la classe (comme vous le savez probablement). La vraie exception devrait être dans la propriété InnerException - pouvez-vous vous en procurer? Cela provient probablement de la base de données, de la méthode Microsoft.SharePoint.Administration.SPPersistedChildCollection InitializeFromDatabse.

Pouvez-vous regarder dans les journaux sharepoint (sur ce serveur errant) pour plus d'informations sur l'erreur de base de données, il sera être là. les journaux de lecture sont une douleur, mais pas si vous installez la fonction ULS Log Viewer de http://www.codeplex.com/features

Depuis le stacktrace a SPAlternateUrl bricoler furhter la pile, peut-être vos zones sont mal configurés (et ne comprennent pas un mappage pour la machine de ce nouveau serveur nom) - accordé, il ne devrait pas échouer ce mauvais, mais que pouvez-vous faire.

Vous pouvez filtrer les journaux ULS par source.

-Oisin

+0

Où regardez-vous comment les zones sont configurées? – James

2

Vérifiez la configuration NLB (Network Load Balancing). La plupart du temps, SharePoint et les applications qui y sont intégrées échouent lorsque NLB change d'état. Il existe un correctif disponible pour résoudre ce problème. Juste une suggestion. Je ne sais pas si c'est la raison. Mais j'ai rencontré un problème similaire et la cause première était un bug NLB

Questions connexes