gpt4 book ai didi

tridion - 无法通过 TridionCoreService 删除组件

转载 作者:行者123 更新时间:2023-12-02 22:22:24 27 4
gpt4 key购买 nike

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

User: NT AUTHORITY\NETWORK SERVICE

StackTrace Information Details: at Tridion.UGC.EventHandler.UGCEventHandler.GetDataSourcesForTCM(String[] tcm) at Tridion.UGC.EventHandler.UGCEventHandler.DeleteItemStats(TcmUri tcm)
at Tridion.UGC.EventHandler.UGCEventHandler.HandlerForComitted(IdentifiableObject subject, DeleteEventArgs args, EventPhases phase) at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Delegate.DynamicInvokeImpl(Object[] args) at Tridion.ContentManager.Extensibility.EventSubscription.DeliverEvent(IEnumerable1
subjects, TcmEventArgs eventArgs, EventPhases phase) at
Tridion.ContentManager.Extensibility.EventSystem.DeliverEvent(IEnumerable
1 subjects, TcmEventArgs eventArgs, EventDeliveryPhase deliveryPhase)
at Tridion.ContentManager.Extensibility.EventSystem.DeliverEvent(IdentifiableObject subject, TcmEventArgs eventArgs, EventDeliveryPhase deliveryPhase)
at Tridion.ContentManager.IdentifiableObject.Delete(DeleteEventArgs deleteEventArgs) at Tridion.ContentManager.IdentifiableObject.Delete() at Tridion.ContentManager.CoreService.CoreServiceBase.Delete(String id)
at SyncInvokeDelete(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at Tridion.ContentManager.CoreService.TransactionSupportInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& 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;

此代码用于模拟。在设置文件中,我可以选择决定是使用 Windows 凭据还是使用设置文件中的凭据。我在使用 Windows LDAP 帐户或手动输入凭据时遇到错误。我还没有尝试为此使用 SDL Administrator。我会试一试并通知你。不管怎样,谢谢你的努力

@更新:我尝试将常规 CoreService 与基本的 http 端点一起使用,但仍然遇到相同的错误。所以身份验证不会在这里造成问题。 UGC 事件似乎出了问题。不幸的是,我没有代码源,也没有关于启用 UGC 的 dll 的任何其他信息。

最佳答案

堆栈跟踪提到了 UGCEventHandler,所以我假设 UGC 已安装,您可以尝试暂时禁用此事件系统,看看是否有帮助,但我认为这不是问题的根源,因为您提到您能够与该用户手动删除。

但是您提到“...在 Tridion Content Manager 机器之外的我的应用程序中使用核心服务”,而且您正在使用 Session Aware 核心服务。

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

尝试使用此处解释的常规核心服务客户端:Get Core Service Client without config file .

或者,如果您坚持使用 Session Aware Core Service Client(我认为您的情况是错误的),请确保您的应用程序在有效的 SDL Tridion 模拟用户下运行(因为您在外部服务器上运行,您需要在 SDL Tridion MMC 管理单元中为其添加域帐户),然后像这样模拟核心服务客户端:

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

关于tridion - 无法通过 TridionCoreService 删除组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com