Я ищу обходной путь ядра WCF wsHttpBinding.
Мне известно, что реализация WCF ядра .net в настоящее время не поддерживает wsHttpBinding (см. Матрицу поддержки здесь https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.1.0.md)
Я интегрируюсь с устаревшей сторонней службой, которая, по-видимому,только поддержка wsHttpBinding. Наш технический стек - ядро .net, поэтому я не могу вернуться к полной версии .net framework или моно.
Вопрос в том, возможно ли использовать службу через пользовательские привязки?надеясь, что есть обходной путь, который, возможно, не полностью функционален, но, по крайней мере, позволяет мне использовать службу.
var cBinding = new CustomBinding();
var textBindingElement = new TextMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.Soap12WSAddressing10
};
cBinding.Elements.Add(textBindingElement);
var httpBindingElement =
new HttpsTransportBindingElement
{
AllowCookies = true, MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue,
};
cBinding.Elements.Add(httpBindingElement);
var myEndpoint = new EndpointAddress("https://..../Service.svc/wss");
using (var myChannelFactory = new ChannelFactory<ISearch>(cBinding, myEndpoint))
{
myChannelFactory.Credentials.UserName.UserName = "...";
myChannelFactory.Credentials.UserName.Password = "...";
ISearch client = null;
try
{
client = myChannelFactory.CreateChannel();
var result = client.Find(new Search("Criteria")).Result;
((ICommunicationObject)client).Close();
myChannelFactory.Close();
}
catch (Exception ex)
{
(client as ICommunicationObject)?.Abort();
}
}
Клиент создается и выполняется вызов службы, но он не выполняется, потому что:
Message = "Сообщение не может быть обработано. Это, скорее всего, потому, что действие '' неверно, или потому что сообщение содержит недопустимый или просроченный токен контекста безопасности или из-за несоответствия между привязкой