gpt4 book ai didi

wcf - Tridion 2011 CoreService 连接

转载 作者:行者123 更新时间:2023-12-04 14:15:55 35 4
gpt4 key购买 nike

我正在使用 Tridion 2011 SP1 并使用此处的代码连接到 CoreService:

http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithoutConfigFile

但是当我尝试做任何简单的操作时,例如:

XElement resultXml = _coreService.GetListXml(publicationId, filterData);

我收到以下错误消息。

"{"由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action 'http://www.sdltridion.com/ContentManager/CoreService/2011/ICoreService/Create' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定(bind)/安全不匹配。检查发送方和接收方是否具有相同的契约(Contract)和相同的绑定(bind)(包括安全要求,例如消息、传输、无)。"}"

有任何想法吗?

完整代码在这里:
            RepositoryItemsFilterData filterData = new RepositoryItemsFilterData();
filterData.ItemTypes = new[]
{
ItemType.Component,
ItemType.Schema
};
filterData.Recursive = true;

ICoreService _coreService = GetNewClient();
XElement resultXml = _coreService.GetListXml(publicationId, filterData);


private ICoreService GetNewClient()
{
var binding = new BasicHttpBinding()
{
MaxBufferSize = 4194304, // 4MB
MaxBufferPoolSize = 4194304,
MaxReceivedMessageSize = 4194304,
ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
{
MaxStringContentLength = 4194304, // 4MB
MaxArrayLength = 4194304,
},
Security = new BasicHttpSecurity()
{
Mode = BasicHttpSecurityMode.TransportCredentialOnly,
Transport = new HttpTransportSecurity()
{
ClientCredentialType = HttpClientCredentialType.Windows,
}
}
};
_hostname = string.Format("{0}{1}{2}", _hostname.StartsWith("http") ? "" : "http://", _hostname, _hostname.EndsWith("/") ? "" : "/");
var endpoint = new EndpointAddress(_hostname + "webservices/CoreService.svc/basicHttp_2010");
ChannelFactory<ICoreService> factory = new ChannelFactory<ICoreService>(binding, endpoint);
factory.Credentials.Windows.ClientCredential = new System.Net.NetworkCredential(_username, _password);
return factory.CreateChannel();
}

更新:
感谢 Nuno 和 Frank 的回复,我现在通过添加服务引用让它工作了,只是有点好奇为什么我的代码不起作用,因为它创建了以下绑定(bind),据我所知(我很可能错过了一些东西)与上面的代码相同
Nuno 的方法也有效 - 感谢 Nuno。

<basicHttpBinding>
<binding name="basicHttp_2010">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>

最佳答案

这不是您问题的答案,但这是我现在与核心服务客户打交道的方式:

  • 添加对 [Tridion]\bin\client\Tridion.ContentManager.CoreService.Client.dll
  • 的引用
  • 将[Tridion]\bin\client\Tridion.ContentManager.CoreService.Client.dll.Config的内容复制到我自己的app.config中

  • 然后在代码中这样做:

    SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient("netTcp_2011");

    完毕。

    PS - 根据 Frank 的建议,将其添加到 Tridion Practice wiki: http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithConfigFile

    关于wcf - Tridion 2011 CoreService 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483731/

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