Я портирую код.net 4.6.2 в проект .net Core, который вызывает службу SOAP. В новом коде я использую С# (из-за некоторых причин конфигурации я просто не могу вспомнить, почему именно сейчас).
Но я получаю следующее исключение.
Произошла ошибка при получении ответа HTTP на https://someurl.com/ws/Thing.pub.ws:Something. Это может быть связано с привязкой конечной точки службы, не использующей протокол HTTP. Это также может быть связано с тем, что сервер HTTP-запроса прерывается, и, возможно, из-за отключения службы. Подробнее см. Журналы сервера.
Код, который его бросает
try
{
var binding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
var endpoint = new EndpointAddress(new Uri("https://someurl.com/ws/TheEndpoint.pub.ws:AService"));
var thing= new TheEndpoint.AService_PortTypeClient(binding, endpoint);
thing.ClientCredentials.UserName.UserName = "usrn";
thing.ClientCredentials.UserName.Password = "passw";
var response = await thing.getSomethingAsync("id").ConfigureAwait(false);
}
finally
{
await thing.CloseAsync().ConfigureAwait(false);
}
Основываясь на старой конфигурации, где он работает, вызывая услугу, это то, чего я не вижу?
<bindings>
<basicHttpsBinding>
<binding name="TheEndpoint_pub_ws_AService_Binder" closeTimeout="00:02:00"
openTimeout="00:02:00" receiveTimeout="00:03:00" sendTimeout="00:03:00">
<security mode="Transport">
<transport clientCredentialType="Basic" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpsBinding>
</bindings>
<client>
<endpoint address="https://someurl.com/ws/Thing.pub.ws:AService"
binding="basicHttpsBinding" bindingConfiguration="TheEndpoint_pub_ws_AService_Binder"
contract="TheEndpoint.AService_PortType" name="TheEndpoint_pub_ws_AService_Port" />
</client>
Я просто не могу найти много информации об этом в Интернете. Надеюсь, ты поможешь мне.
UPDATE По предложению Sixto Saez я получил конечную точку, чтобы показать ее ошибку, и это
HTTP-запрос несанкционирован с помощью схемы аутентификации клиента "Basic". Аутентификационный заголовок, полученный с сервера, был "Basic realm =" Сервер интеграции ", кодировка =" UTF-8 "".
Я попытаюсь выяснить, что делать и опубликовать результат здесь, если он будет успешным.
ОБНОВЛЕНИЕ 2
Теперь я попытался перейти к новому синтаксису с помощью этого кода здесь
ChannelFactory<IAService> factory = null;
IAService serviceProxy = null;
Binding binding = null;
try
{
binding = new BasicHttpsBinding(BasicHttpsSecurityMode.Transport);
factory = new ChannelFactory<IAService>(binding, new EndpointAddress(new Uri("https://someurl.com/ws/TheEndpoint.pub.ws:AService")));
factory.Credentials.UserName.UserName = "usrn";
factory.Credentials.UserName.Password = "passw";
serviceProxy = factory.CreateChannel();
var result = await serviceProxy.getSomethingAsync("id").ConfigureAwait(false);
factory.Close();
((ICommunicationObject)serviceProxy).Close();
}
catch (MessageSecurityException ex)
{
//error caught here
throw;
}
но я все равно получаю ту же (немного другую) ошибку. Теперь он имеет "Анонимный" вместо "Базовый" и теперь отсутствует ", кодировка =" UTF-8 "в конце.
HTTP-запрос неавторизован с помощью схемы проверки подлинности клиента "Аноним". Аутентификационный заголовок, полученный с сервера, был "Basic realm =" Integration Server ".
Является ли проблема на моей стороне или на серверах?
Очевидно, что у моих SOAP-навыков сейчас очень мало времени, но я просто пробовал все конфигурационные комбо, с которыми я могу думать с этим новым подходом без везения. Надеюсь, кто-то может указать мне в правильном направлении.