Сайт MOSS 2007 в исключительной ситуации инициализатора типа фермы - PullRequest
3 голосов
/ 13 апреля 2009

У нас есть какое-то решение, созданное нами для фермы MOSS, одно из которых включает задание таймера. Эта работа прекрасно работала в течение нескольких месяцев. Недавно администратор включил еще один сервер в ферму, и на этом новом компьютере автоматически запустилось задание таймера. Как только произошло это переключение, наше задание таймера начало выдавать ошибку, описанную ниже (обнаружил это в журналах SP).

Сначала я подумал, что это проблема с правами, но служба таймера на машине, на которой он работал раньше, и новая, работают под той же учетной записью домена. Кажется, что происходит сбой во время зацикливания списка сайтов в семействе сайтов только на одном из сайтов / веб-сайтов (фрагмент кода ниже). Я знаю, что эта учетная запись домена имеет доступ к этому, потому что он работает на другом поле под той же учетной записью. У кого-нибудь есть идеи о том, почему происходит эта загадочная ошибка? Или если на этом новом компьютере необходимо выполнить какую-либо специальную процедуру, чтобы убедиться, что он имеет надлежащие списки ACL для всех баз данных в ферме MOSS?

Код:

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) 

Исключение:

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)    

Ответы [ 4 ]

4 голосов
/ 13 апреля 2009

Проверьте библиотеки DLL для SharePoint, все ли существуют и все имеют одинаковую версию? Попробуйте установить перехват для TypeInitializationException и посмотрите, что не так внутри этого исключения.

3 голосов
/ 18 апреля 2009

Это не решение, но в качестве временного решения я думаю, что мое предложение по одному из ваших других вопросов здесь:

Как вы даете указание ферме SharePoint запускать задание таймера на определенном сервере?

будет продолжать работать, пока вы продолжите расследование.

2 голосов
/ 23 апреля 2009

Проверьте конфигурацию NLB (балансировки сетевой нагрузки). В большинстве случаев SharePoint и приложения, интегрированные в него, не работают, когда NLB меняет свое состояние. Для решения этой проблемы доступен патч. Просто предложение. Не уверен, если это причина. Но я столкнулся с подобной проблемой, и основной причиной была ошибка NLB

1 голос
/ 21 апреля 2009

Исключение типа init означает, что исключение произошло в .ctor класса (как вы, вероятно, знаете). Настоящее исключение должно быть в свойстве InnerException - можете ли вы получить это в свои руки? Скорее всего, это происходит из базы данных, из метода Microsoft.SharePoint.Administration.SPPersistedChildCollection InitializeFromDatabse.

Можете ли вы посмотреть в журналах sharepoint (на этом ошибочном сервере) информацию об ошибке базы данных, там будет . Чтение журналов затруднительно, но если вы устанавливаете функцию просмотра журнала ULS из http://www.codeplex.com/features

Поскольку в трассировке стека имеется SPAlternateUrl, которая вносит изменения в стек, возможно, ваши зоны неправильно сконфигурированы (и не включают сопоставление имени компьютера этого нового сервера) - это не должно провалиться, но что вы можете сделать.

Вы можете фильтровать журналы ULS по источнику.

-Oisin

...