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)
例外の種類は何ですか? –
これはTypeInitializerException例外です。これは、コンテンツレベルのSQLへのアクセスの問題から発生しているようです。しかし、上記のように、タイマーサービスは十分な特権を持つドメインアカウントで実行されています。私はそのアカウントでSQL管理スタジオにログインし、コンテンツdbのすべてにアクセスできるため、これを知っています。 – James
デバッグしようとすると、内部の例外を見て幸運にも何か?本当の情報がそこにあります。 –