1

嗨,我正在尝试使用以下代码使用另一个人的凭据通过核心服务连接到 Tridion:

using (ChannelFactory<ISessionAwareCoreService> factory = 
  new ChannelFactory<ISessionAwareCoreService>("netTcp_2011"))
{
  NetworkCredential networkCredential = 
   new NetworkCredential("username", "password", "domain");
  factory.Credentials.Windows.ClientCredential = networkCredential;
  ISessionAwareCoreService client = factory.CreateChannel();
  Console.WriteLine(client.GetCurrentUser().Title);

但我得到错误:

Could not connect to net.tcp://localhost:2660/CoreService/2011/netTcp. The connection attempt lasted for a time span of 00:00:01.0310784. TCP error code 10061: No connection could be made because the target machine actively refused it 127.0.0.1:2660
4

1 回答 1

4

要回答您的问题,只有在端口 2660 开放的情况下才能将 netTcp 用于远程客户端。因此,如果您不确定防火墙限制,最好使用 wsHttp 或 basicHttp 绑定。

此外,我没有得到的一件事是您正在使用会话感知核心服务客户端并且您正在尝试提供密码。这对我来说并没有真正增加,在我看来,会话感知核心服务客户端应该用于您的用户帐户已经针对 SDL Tridion 进行身份验证的情况,或者当您通过有效的 SDL 调用核心服务时Tridion 模拟用户。之后,您只需通过用户名(不需要密码)模拟对有效 SDL Tridion 用户名的核心服务调用。您可以为 SessionAwareCoreServiceClient 提供凭据(用户名和密码),但是您必须提供有效 SDL Tridion 模拟用户的凭据,然后您仍然必须进行模拟。

我建议尝试使用常规的核心服务客户端,如下所述:获取没有配置文件的核心服务客户端

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

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

但是您当然仍然必须选择正确的绑定。

于 2013-01-17T12:05:18.860 回答