8

我正在尝试在 Tridion 2011 SP1 HR1 中模拟核心服务,但出现此错误:

无法处理该消息,因为操作“http://www.sdltridion.com/ContentManager/CoreService/2011/ISessionAwareCoreService/Impersonate”无效或无法识别。

为什么会这样?我必须是盲目的看不出它为什么不起作用......

关于服务器:全新安装 Tridion 2011 SP1 HR1

我的代码如下所示:

 client = Client.GetCoreService();

 if (string.IsNullOrEmpty(username)) username = HttpContext.Current.User.Identity.Name;
      client.Impersonate(username);

这是 GetCoreService 方法:

public static SessionAwareCoreServiceClient GetCoreService()
{
       AppSettingsReader reader = new AppSettingsReader();

       string coreServiceUrl = (string)reader.GetValue("CoreServiceEndPoint", typeof(string));
       int dataSize = (int)reader.GetValue("DataSize", typeof(int));

       var quotas = new System.Xml.XmlDictionaryReaderQuotas
       {
           MaxStringContentLength = dataSize,
           MaxArrayLength = dataSize,
           MaxBytesPerRead = dataSize
       };

       var httpBinding = new WSHttpBinding
       {
           MaxReceivedMessageSize = 10485760,
           ReaderQuotas = quotas,
           Security = { Mode = SecurityMode.Message, Transport = { ClientCredentialType = HttpClientCredentialType.Windows } }
       };

       var endpoint = new EndpointAddress(coreServiceUrl);
       var result = new SessionAwareCoreServiceClient(httpBinding, endpoint);

       return result;
  }

从 appsettings 中提取(将实际主机名替换为“主机名”):

<add key="CoreServiceEndPoint" value="http://hostname/WebServices/CoreService.svc/wsHttp_2010" />
<add key="DataSize" value="41943040" />
4

2 回答 2

6

查看来自开源项目的此示例以获取通知,它可以满足您的需要

http://code.google.com/p/tridion-notification-framework/source/browse/NotificationService/NotificationService/CoreService/Client.cs

这是模仿的工作线

public static SessionAwareCoreServiceClient GetCoreService()
{
    var result = GetNewClient<SessionAwareCoreServiceClient>();


    result.Impersonate(ConfigurationManager.AppSettings.Get("adminUser"));
    return result;
}

还请查看在同一 CS 文件中的示例中创建客户端的方式,以及应用程序设置。我认为您使用的是旧的端点地址,它应该是http://hostname/webservices/CoreService2011.svc/wsHttp而不是http://hostname/WebServices/CoreService.svc/wsHttp_2010

于 2012-12-12T12:20:54.147 回答
3

您正在连接到旧的核心服务 wsHttp 端点。

如果您使用的是 2011 SP1 客户端,则需要改为连接到以下端点:

http://hostname/webservices/CoreService2011.svc/wsHttp

于 2012-12-12T12:45:49.203 回答