使用核心服务和模拟发布

时间:2013-01-28 17:42:29

标签: tridion tridion-2011

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

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

  • 更新:下面的代码工作正常 - 既有模仿,也有Nick的解决方案。我的问题实际上是我如何从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);
}

1 个答案:

答案 0 :(得分: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);
}