2009-04-13 8 views
3

Wir haben eine Lösung, die wir gegen eine MOSS-Farm gebaut, von denen einer einen Timer-Job enthält. Dieser Job hat seit Monaten gut funktioniert. Vor kurzem hat der Administrator einen anderen Server in die Farm aufgenommen, und unser Timer-Job wurde automatisch auf diesem neuen Rechner gestartet. Sobald dieser Wechsel stattgefunden hat, hat unser Timer-Job begonnen, den folgenden Fehler zu liefern (gefunden in den SP-Protokollen).MOSS 2007-Site in einer Farm Initialisierer Ausnahme

Zuerst dachte ich, es war ein Rechtsproblem, aber der Timer-Dienst auf der Maschine, wo es zuvor funktioniert hat und die neue läuft unter dem gleichen Domain-Konto. Es scheint zu versagen, während die Site-Liste in einer Websitesammlung auf nur einer der Sites/Webs (Code-Snippet unten) wiederholt wird. Ich weiß, dass dieses Domain-Konto Zugriff darauf hat, weil es auf der anderen Box unter demselben Konto funktioniert. Hat jemand irgendwelche Ideen, warum dieser kryptische Fehler auftritt? Oder ob ein spezieller Vorgang auf dieser neuen Maschine durchgeführt werden muss, um sicherzustellen, dass sie für alle Datenbanken in der MOSS-Farm die richtigen ACLs hat?

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) 

Ausnahme:

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

Was ist der Typ der Ausnahme? –

+0

ist es eine Ausnahme vom TypInitializerException. Es scheint, dass es von einem Zugriffsproblem auf SQL-Ebene auf die Inhaltsdatenbank stammt. Aber wie ich oben gesagt habe, läuft der Timer-Dienst unter einem Domain-Account mit ausreichenden Privilegien.Ich weiß das, weil ich mich mit diesem Konto in SQL Management Studio eingeloggt habe und auf alles in der Inhaltsdatenbank zugreifen konnte. – James

+0

Irgendein glücklicher Versuch, zu debuggen oder in die innere Ausnahme zu schauen? Dort werden die echten Informationen sein. –

Antwort

4

Überprüfen Sie die DLLs für Sharepoint, das tut alles existiert und alle sind um die gleiche Version? Versuchen Sie, einen Catch für die TypeInitializationException einzufügen, und sehen Sie, was in dieser Ausnahme falsch ist.

+0

+1 Sie (die Admins) sagten, dass dieser neue Server ein Klon ist, also sollte er die gleichen DLL-Versionen haben, aber ich werde das definitiv überprüfen. – James

+0

Haben die DLLs ausgecheckt? Was hat die innere Ausnahme gesagt? Ich bin definitiv kein Experte für SharePoint, aber wenn ich noch einmal auf Ihre Stack-Trace-Funktion schaue, kommt vielleicht gar nichts in der siteCollection auf. Können Sie dort Punkte setzen und sehen, dass Sie die richtige (bevölkerte) Farm/WebApp/Site erhalten? –

+0

Die DLLs sind die gleichen, und ich habe keine Möglichkeit, irgendwelche Remote-Debugging ohne viel Aufwand zu tun. Ich hoffe nur, dass es eine einfachere Antwort gibt! SharePoint kann so ein Schmerz sein manchmal ... – James

1

Eine Init-Ausnahme Typ bedeutet nur, dass eine Ausnahme in der .ctor der Klasse aufgetreten ist (wie Sie wahrscheinlich wissen). Die wirkliche Ausnahme sollte in der InnerException-Eigenschaft sein - können Sie das in die Finger kriegen? Wahrscheinlich stammt es von der Datenbank in Ordnung, von Microsoft.SharePoint.Administration.SPPersistedChildCollection InitializeFromDatabase Methode.

Können Sie in den Sharepoint-Protokollen (auf diesem fehlerhaften Server) nach Informationen über den Datenbankfehler suchen, es wird da sein. Lesen Protokolle sind ein Schmerz, aber nicht, wenn Sie die ULS Log Viewer-Funktion von http://www.codeplex.com/features

Da die stacktrace SPAlternateUrl Bastelei hat installieren furhter auf dem Stapel, vielleicht sind Ihre Zonen falsch konfiguriert (und enthalten keine Zuordnung für diese neue Server der Maschine Name) - gewährt, sollte es nicht scheitern, aber was können Sie tun.

Sie können die ULS-Protokolle nach Quelle filtern.

-Oisin

+0

Wo sehen Sie, wie die Zonen konfiguriert sind? – James

2

Überprüfen Sie die NLB (Network Load Balancing) -Konfiguration. Die meiste Zeit, in der SharePoint und Anwendungen integriert sind, schlägt fehl, wenn NLB seinen Status ändert. Es ist ein Patch verfügbar, um dieses Problem zu lösen. Nur ein Vorschlag. Nicht sicher, ob das der Grund ist. Aber ich habe ein ähnliches Problem konfrontiert und die Ursache war ein NLB-Fehler

Verwandte Themen