1

Sitecoreアイテム(非アクティブまたは古い製品)のクリーンアップジョブを実行するWindowsサービスを使用していますが、それらを削除しようとするとできません。

if (qItem != null)
{
 qItem.Recycle();
}

RelevatStackTraceは次のとおりです。

Message: Object reference not set to an instance of an object.
StackTrace:   at Sitecore.Tasks.ItemEventHandler.OnItemDeleted(Object sender, EventArgs args)
   at Sitecore.Events.Event.EventSubscribers.RaiseEvent(String eventName, Object[] parameters, EventResult result)
   at Sitecore.Events.Event.EventSubscribers.RaiseEvent(String eventName, Object[] parameters)
   at Sitecore.Events.Event.RaiseEvent(String eventName, Object[] parameters)
   at Sitecore.Events.Event.RaiseItemDeleted(Object sender, ItemDeletedEventArgs args)
   at Sitecore.Events.Event.DataEngine_ItemDeleted(Object sender, ExecutedEventArgs`1 e)
   at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   at Sitecore.Data.Engines.EngineCommand`2.RaiseExecuted()
   at Sitecore.Data.Engines.DataEngine.RaiseDeletedItem(Item item, ID parentId, Boolean result)
   at Sitecore.Data.Archiving.Archive.NotifyItemDeleted(Item item, ID parentId)
   at Sitecore.Data.Archiving.SqlArchive.DoArchiveItems(IEnumerable`1 items, Guid archivalId)
   at Sitecore.Data.Archiving.SqlArchive.DoArchiveItems(IEnumerable`1 items, Guid archivalId)
   at Sitecore.Data.Archiving.SqlArchive.ArchiveItem(Item item)
   at Sitecore.Data.Items.Item.Recycle()

このエラーは、Windowsサービスからアイテムをリサイクルした場合にのみ発生することを再度述べます。同じリサイクルがWebアプリから問題なく機能します。

Webアプリでは、sitecoreにログインしており、ユーザーはadminであるため、彼にはいくつかの権限があります。

Windowsサービスでは、ユーザー(Sitecore.Context.User)は"default\Anonymous"です。

セキュリティチェックをバイパスするために、結果なしでSecurityDisabler内のRecycle呼び出しを囲みました。

WindowsサービスからSitecoreにログインする必要がありますか?はいの場合、どうすればそれを行うことができますか?

または、Web以外のアプリケーションからSitecoreアイテムをリサイクル/削除する別の方法はありますか?

アクセス拒否例外を実行してスローするコードは次のとおりです(SecurityDisablerコンテキスト内では実行されません)。

セキュリティディセーブルの内部ではなく、アイテムを直接リサイクルします。 これは、SecurityDisablerコンテキスト内でアイテムをリサイクルするコードです。アクセス拒否の例外はありませんが、「オブジェクト参照がインスタンスに設定されていません」という例外があります。

SecurityDisablerコンテキスト内のアイテムをリサイクルする

4

3 に答える 3

4

Reflector でSitecore.Tasks.ItemEventHandler.OnItemDeleted例外をスローしているメソッド ( ) を見ると、null 参照は TaskDatabase である可能性が高いように見えます。

protected void OnItemDeleted(object sender, EventArgs args)
{
    Item item = Event.ExtractParameter(args, 0) as Item;
    Error.AssertNotNull(item, "No item in parameters");
    using (new SecurityDisabler())
    {
        Globals.TaskDatabase.RemoveItemTasks(item);
    }
}

あなたの Windows サービスには、Sitecore の設定を取り除いた App.config があると思います。/sitecore/configuration/TaskDatabase要素が Sitecore 構成にあることを確認する必要があります。

于 2012-10-03T13:57:55.103 に答える
1

Sitecore インスタンスをインストールすると、Sitecore アプリケーションと同じドメインで公開される Web サービスが提供されます。

http://sitedomain.com/sitecore/shell/webservice/service.asmx

このサービスには、Sitecore API を操作するために必要なすべてのメソッドが含まれています。

それは私のために働いた

于 2013-02-08T13:09:37.107 に答える