2

我有一个 Tridion 核心服务 Web 应用程序来发布页面。当登录到服务器并通过浏览器客户端从那里运行它时,它使用 ajax 调用 Web 服务,它工作正常。但是,当我从桌面运行应用程序时,它什么也不做,也不会抛出任何错误消息。

*编辑:托管 Web 服务的 Web 应用程序在 Tridion 2011 CMS 网站下作为“应用程序”运行。这样做是为了避免跨域 ajax 问题/

  • 更新:下面的代码运行良好 - 无论是模拟还是尼克的解决方案。我的问题实际上在于我如何从 jQuery 调用 Web 服务并使用适当的 URL。我要留下代码和问题,所以也许它会帮助其他人。

我的代码是:

string binding = "wsHttp_2011";
using (var client = new SessionAwareCoreServiceClient(binding))
{
    client.Impersonate("company\\cms_svc");

    // ** Get Items to Publish
    List<string> itemsToPublish = GetItemsToPublish(publishItem.TcmUri, client);

    PublishInstructionData instruction = new PublishInstructionData
    {
        ResolveInstruction = new ResolveInstructionData() { IncludeChildPublications = false },
        RenderInstruction = new RenderInstructionData()
    };

    PublicationTargetData pubtarget = (PublicationTargetData)client.Read(publishItem.PubTargetUri, readoptions);
    List<string> target = new List<string>();
    target.Add(pubtarget.Id);

    client.Publish(itemsToPublish.ToArray(), instruction, target.ToArray(), GetPublishPriority(publishItem.Priority), readoptions);
}
4

1 回答 1

4

请查看 SDL Live Content 上的此页面,其中解释了以不同用户身份连接的各种类型的场景:

http://sdllivecontent.sdl.com/LiveContent/content/en-US/SDL_Tridion_2011_SPONE/task_87284697A4BB423AAD5387BBD6884735

根据文档,您可能希望使用 NetworkCredential 建立核心服务连接,而不是模拟,如下所示:

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);
}
于 2013-01-28T19:31:52.040 回答