2009-04-13 34 views
3

我们有一些针对MOSS农场建立的解决方案,其中一个包含计时器作业。这份工作几个月来一直很好。最近,管理员向服务器场征用了另一台服务器,我们的计时器作业自动开始在这台新机器上运行。只要这个开关发生,我们的计时器作业开始产生下面的错误(在SP日志中找到这个错误)。MOSS 2007网站在农场类型初始值设定项例外

起初我以为这是一个供应问题,但是它之前的机器上的计时器服务和新服务器在同一个域帐户下运行。在站点集合中,只在其中一个站点/网站(以下代码段)中循环站点列表时,似乎失败。我知道这个域帐户可以访问这个帐户,因为它可以在同一个帐户下的另一个框中工作。有没有人有任何想法,为什么这个神秘的错误发生?或者如果需要在这台新机器上执行任何特殊过程以确保它对MOSS场中的所有数据库都有适当的ACL?

代码:

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)  
+0

异常的类型是什么? – 2009-04-21 14:16:49

+0

这是一个TypeInitializerException异常。它似乎源于对内容数据库的SQL级别访问问题。但正如我上面所说的那样,计时器服务在具有足够特权的域帐户下运行。我知道这是因为我使用该帐户登录到SQL管理工作室,并能够访问内容数据库中的所有内容。 – James 2009-04-21 15:45:06

+0

任何幸运的尝试调试或寻找内部异常?这就是真实的信息。 – 2009-04-23 20:24:23

回答

4

检查SharePoint中的DLL,尽一切存在,都是相同的版本?尝试为TypeInitializationException添加一个catch,并查看该异常内的错误。

1

Type初始化异常仅仅意味着该类的.ctor中发生异常(正如您可能知道的那样)。真正的异常应该在InnerException属性中 - 你能掌握这个吗?可能它源自数据库好,从Microsoft.SharePoint.Administration.SPPersistedChildCollection InitializeFromDatabse方法。

您可以查看关于数据库错误的信息的sharepoint日志(在那个错误的服务器上),它会在处有。阅读日志是一个痛苦,但如果你从http://www.codeplex.com/features

安装ULS日志查看器功能因为堆栈跟踪已SPAlternateUrl furhter修修补补的堆栈,也许你的区域是配置错误(不包括为这个新的服务器的计算机的映射名称) - 授予,它不应该失败这个不好,但你能做什么。

您可以按来源过滤ULS日志。

-Oisin

2

检查NLB(网络负载平衡)配置。当NLB更改其状态时,大多数情况下SharePoint和应用程序都会失败。有一个补丁可以解决这个问题。只是一个建议。不知道这是否是原因。但我遇到了类似的问题,其根本原因是NLB错误

相关问题