Проект .NET Core не может вызвать метод библиотеки классов .NET 4.6, использующий NTLM - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть проект .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 не работает должным образом с другими вызовами.Есть ли другие способы заставить это работать, не вынимая этот проект из решения и не делая его автономным сервисом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...