无法通过TridionCoreService删除组件

Bog*_*vic 2 tridion tridion-2011

我无法使用CoreService SessionAwareCoreServiceClient删除任何项目.我能够创建/读取组件,创建文件夹...... 作为一个错误,我得到"对象引用未设置为对象的实例".我想请注意,我在Tridion Content Manager机器之外的应用程序中使用核心服务.以下是来自CM服务器的日志:

用户:NT AUTHORITY\NETWORK SERVICE

StackTrace信息详细信息:位于Tridion.UGC.EventHandler.UGCEventHandler.DeleteItemStats(TcmUri tcm)的Tridion.UGC.EventHandler.UGCEventHandler.GetDataSourcesForTCM(String [] tcm)
在System的System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object []参数,SignatureStruct&sig,MethodAttributes methodAttributes,RuntimeType typeOwner)中的Tridion.UGC.EventHandler.UGCEventHandler.HandlerForComitted(IdentifiableObject subject,DeleteEventArgs args,EventPhases阶段). System.Reflection.RuntimeMethodInfo.Invoke中的RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo方法,Object目标,Object []参数,Signature sig,MethodAttributes methodAttributes,RuntimeType typeOwner)(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化,在Tridion.ContentManager.Extensibility.EventSubscription.DeliverEvent(IEnumerable)的System.Delegate.DynamicInvokeImpl(Object [] args)处的布尔值skipVisibilityChecks)1 subjects, TcmEventArgs eventArgs, EventPhases phase) at Tridion.ContentManager.Extensibility.EventSystem.DeliverEvent(IEnumerable1受试者,TcmEventArgs EventArgs的,EventDeliveryPhase deliveryPhase)
在Tridion.ContentManager.Extensibility.EventSystem.DeliverEvent(IdentifiableObject受试者,TcmEventArgs EventArgs的,EventDeliveryPhase deliveryPhase)
在Tridion.ContentManager.IdentifiableObject.Delete(DeleteEventArgs deleteEventArgs)在Tridion.ContentManager.IdentifiableObject.Delete( )在Tridion.ContentManager.CoreService.CoreServiceBase.Delete(String id)
在SyncInvokeDelete(Object,Object [],Object [])上的System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象实例,对象[]输入,对象[]和输出)在Tridion.ContentManager.CoreService.TransactionSupportInvoker.Invoke(Object实例,对象[]输入,对象[]和输出)在System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&rpc)的System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&rpc)处于System.ServiceModel.Dispatcher.ImmutableDispatchRuntime. ProcessMessage41(MessageRpc&rpc)位于System.ServiceModel的System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&rpc),位于System.ServiceModel的System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&rpc).位于System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&rpc)的System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&rpc)上的Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&rpc),位于System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&rpc) )在System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)rpc)at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)rpc)at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

使用已使用的帐户,我可以手动删除项目,这意味着我拥有正确的权限.任何帮助/建议都不仅仅是可用的......


 _client = new SessionAwareCoreServiceClient("wsHttp_2011");
            bool useWindowsCredentials = bool.Parse(Environment.EnvironmentUserSettings.UseWindowsCredentials);
            var credentials = CredentialCache.DefaultNetworkCredentials;
            if (!useWindowsCredentials)
            {
                string password=Environment.EnvironmentUserSettings.Password;
                credentials = new NetworkCredential(Environment.EnvironmentUserSettings.UserName, password);
            }

            _client.ChannelFactory.Credentials.Windows.ClientCredential = credentials;
Run Code Online (Sandbox Code Playgroud)

此代码用于模拟.在设置文件中,我可以选择是否使用Windows凭据或来自设置文件的凭据.我使用Windows LDAP帐户或手动输入凭据时收到错误.我还没有尝试过使用SDL Administrator.我会尝试并通知你.无论如何,谢谢你的努力

@UPDATE:我尝试过使用常规CoreService和基本的http端点,但仍然会遇到同样的错误.因此,身份验证不会导致问题.看来UGC事件出了问题.不幸的是,我没有代码源也没有关于启用UGC的dll的任何其他信息.

Bar*_*man 5

stacktrace提到了UGCEventHandler,所以我假设安装了UGC,你可以尝试暂时禁用这个事件系统,看看是否有帮助,但我认为它不是你提到的问题的根源,你可以手动删除那个用户.

但是,你提到"......在Tridion Content Manager机器之外的应用程序中使用核心服务",以及你正在使用Session Aware核心服务.

编辑:所以你使用Session Aware核心服务客户端,你也提供密码.这并没有真正加起来,会话感知核心服务客户端应该用于您的用户帐户已经过身份验证的情况,或者当您通过有效的SDL Tridion模拟用户调用核心服务时,您冒充Core Service仅通过用户名调用有效的SDL Tridion用户名(无需密码).

尝试使用常规Core Service Client,如下所述:获取没有配置文件的Core Service Client.

或者,如果您坚持使用Session Aware核心服务客户端(我认为您的情况不对),请确保您的应用程序在有效的SDL Tridion模拟用户下运行(因为您在外部服务器上运行,您需要添加一个在SDL Tridion MMC管理单元中的域帐户,然后模仿核心服务客户端,如下所示:

using (SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient())
{
    // impersonate with valid user
    client.Impersonate("SDL Tridion Username here");
    // use client
    client.Delete(...);
}
Run Code Online (Sandbox Code Playgroud)