私は Tridion 2011 SP1 を使用しており、次のコードを使用して CoreService に接続しています。
http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithoutConfigFile
しかし、次のような簡単な操作をしようとすると:
XElement resultXml = _coreService.GetListXml(publicationId, filterData);
以下のエラーメッセージが表示されます。
"{"アクション 'http://www.sdltridion.com/ContentManager/CoreService/2011/ICoreService/Create' を含むメッセージは、EndpointDispatcher での ContractFilter の不一致により、受信側で処理できません。これは、コントラクトの不一致 (送信者と受信者の間のアクションの不一致) または送信者と受信者の間のバインディング/セキュリティの不一致が原因である可能性があります。送信者と受信者が同じコントラクトと同じバインド (メッセージ、トランスポート、なしなどのセキュリティ要件を含む) を持っていることを確認してください。"}"
何か案は?
完全なコードはこちら:
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 に感謝します。サービス参照を追加することで動作するようになりました。そして、私は何かを見逃しているかもしれません)
Nunoのアプローチの上のコードも同じように機能します-Nunoに感謝します。
<basicHttpBinding>
<binding name="basicHttp_2010">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>