У меня есть проект .NET Core 2.1, использующий AutoFAC для DI.У меня есть проект библиотеки классов в решении, которое работает .NET Framework 4.6.Я использую wsdl от конечной точки, которая требует передачи определенных учетных данных NTLM.В отдельном проекте .NET 4.6 мой код работает, но когда я вызвал метод проекта .NET 4.6 из кода .NET Core 2.1, я получаю следующую ошибку:
Authentication failed because the connection could not be reused.
at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(HttpRequestException requestException, HttpRequestMessage request, HttpAbortReason abortReason)
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpClientRequestChannel.HttpClientChannelAsyncRequest.SendRequestAsync(Message message, TimeoutHelper timeoutHelper)
at System.ServiceModel.Channels.RequestChannel.RequestAsync(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.RequestAsyncInternal(Message message, TimeSpan timeout)
at System.Runtime.TaskHelpers.WaitForCompletionNoSpin[TResult](Task`1 task)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(MethodCall methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(MethodInfo targetMethod, Object[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Reflection.DispatchProxyGenerator.Invoke(Object[] args)
at generatedProxy_1.SO(SORequest )
at PM.xpSvc.xpWSSoapClient.PM.xpSvc.xpWSSoap.SO(SORequest request)
at PM.xpSvc.xpWSSoapClient.SO(IPackets pPacketsIn)
at PM.Services.xpService.CreditCardSubmitPayment(CreditCardSubmitPaymentRequestModel request)
Вот некоторые изкод в методе .NET 4.6, который передает NTLM-аутентификацию конечной точке:
EndpointAddress myEndpoint = new EndpointAddress("https://secret.com/ws.asmx");
BasicHttpsBinding myBinding = new BasicHttpsBinding();
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
myBinding.Security.Mode = BasicHttpsSecurityMode.Transport;
var xpService = new xpWSSoapClient(myBinding, myEndpoint);
xpService.ClientCredentials.Windows.ClientCredential.Domain = "domain";
xpService.ClientCredentials.Windows.ClientCredential.UserName = "user";
xpService.ClientCredentials.Windows.ClientCredential.Password = "pass";
response = xpService.SO(requestModelHere);
Я получил этот запрос на работу, если я добавил его непосредственно перед вызовом:
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
Однако это приводит к тому, что остальная часть проекта .NET Core не работает должным образом с другими вызовами.Есть ли другие способы заставить это работать, не вынимая этот проект из решения и не делая его автономным сервисом?