2009-04-13 9 views
3

MOSSファームに対して構築したソリューションの1つに、タイマジョブが含まれています。この仕事は何ヶ月もうまくいきました。最近、管理者が別のサーバーをファームに登録し、タイマージョブがこの新しいマシンで自動的に実行され始めました。このスイッチが発生するとすぐに、タイマージョブが以下のエラーを生成し始めました(SPログでこれを検出しました)。ファームタイプイニシャライザ例外のMOSS 2007サイト

最初は権利の問題だと思っていましたが、それ以前に働いていたマシンのタイマーサービスと新しいドメインアカウントが同じドメインアカウントで実行されていました。サイトコレクションのサイトリストを、サイト/ Webの1つ(以下のコードスニペット)だけでループしている間は、失敗しているようです。私はこのドメインアカウントは同じアカウントの他のボックスで動作するため、このアカウントにアクセスできることを知っています。この謎めいたエラーがなぜ発生しているのか誰にも分かりますか?または、この新しいマシンで、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

例外の種類は何ですか? –

+0

これはTypeInitializerException例外です。これは、コンテンツレベルのSQLへのアクセスの問題から発生しているようです。しかし、上記のように、タイマーサービスは十分な特権を持つドメインアカウントで実行されています。私はそのアカウントでSQL管理スタジオにログインし、コンテンツdbのすべてにアクセスできるため、これを知っています。 – James

+0

デバッグしようとすると、内部の例外を見て幸運にも何か?本当の情報がそこにあります。 –

答えて

4

SharePoint用のDLLをチェックし、すべてが存在し、すべてが同じバージョンであるのですか? TypeInitializationExceptionのcatchを入れて、その例外の中で何が間違っているのかを見てください。

+0

+1彼ら(管理者)は、この新しいサーバーはクローンだから、同じdllバージョンを持っているはずだと言っていますが、確かにそれをチェックします。 – James

+0

DLLがチェックアウトしましたか?内部の例外は何を言ったのですか?私は間違いなくSharePointの専門家ではありませんが、スタックトレースをもう一度見て、おそらく何もsiteColletionに登場していません。あなたはそこにブレークポイントを入れて、あなたが正しい(人口に集まった)Farm/WebApp/Siteを取得しているのを見ることができますか? –

+0

dllは同じで、多くの手間をかけずにリモートデバッグを行う方法はありません。私は単純な答えがあることを願っています! SharePointは時々そのような痛みになることがあります... – James

1

タイプ初期化例外は、(おそらく分かっているように)クラスの.ctorで例外が発生したことを意味します。実際の例外は、InnerExceptionプロパティにある必要があります - あなたはこれに手を差し伸べることができますか? Microsoft.SharePoint.Administration.SPPersistedChildCollection InitializeFromDatabseメソッドから、データベースから問題が発生している可能性があります。

データベースエラーに関する情報については、その虚偽のサーバ上の共有ログを調べることができます。になります。ログを読むのは苦痛ですが、ULSログビューアの機能をインストールしていない場合は表示されません。http://www.codeplex.com/features

スタックトレースにはSPAlternateUrlがスタックを突き上げているため、ゾーンが誤って設定されている可能性があります名前) - 与えられた、それはこの悪いことを失敗するべきではありませんが、あなたは何をすることができます。

ソースごとにULSログをフィルタリングできます。

-Oyin

+0

どのようにゾーンが設定されているかを見ていますか? – James

2

NLB(ネットワーク負荷分散)構成を確認します。 NLBが状態を変更すると、ほとんどの場合、SharePointとそれに統合されたアプリケーションが失敗します。この問題を解決するためのパッチがあります。ちょうど提案。これが理由であるかどうかはわかりません。しかし、私は同様の問題に直面しており、その根本原因はNLBバグでした。

関連する問題