Запрос к WCF из ASP.NET Core
От: yenik  
Дата: 19.04.19 15:19
Оценка:
Сгенерировал прокси к WCF-сервису. WCF-сервис требует аутентификации пользователем Active Directory.
Из консольного приложения запрос проходит нормально, безо всяких ухищрений.
Копирую код в приложение ASP.NET Core, получаю:
CommunicationException: Authentication failed because the connection could not be reused.
Оба приложения .NET Core 2.2.

Запускаю Fiddler, веб-приложения работает нормально — три запроса, Negotiate, в третьем запросе получаю нужный ответ.
Как починить, чтобы без Fiddler работало?
Re: Запрос к WCF из ASP.NET Core
От: takTak  
Дата: 19.04.19 19:27
Оценка:
так консольное приложение выполняется из под контекста конкретного пользователя, а веб-приложение исполняется, скорее всего, из под контекста ApplicationPoolIdentity, который , наверное, никаким местом к AD не привязан

вообще, странное сочетание, но если очень хочется, то можно либо сменить application pool/ApplicationPoolIdentity на какого-то конкретного пользователя, либо использовать Impersonation, и опять же вызов производить из контекста этого самого существующего AD пользователя

посмотри, как в WCF tracing конфигурируется, чуть побольше деталей увидишь того, что там не так
Re[2]: Запрос к WCF из ASP.NET Core
От: yenik  
Дата: 22.04.19 07:21
Оценка:
T>так консольное приложение выполняется из под контекста конкретного пользователя, а веб-приложение исполняется, скорее всего, из под контекста ApplicationPoolIdentity, который , наверное, никаким местом к AD не привязан

Да не в этом дело. Веб-приложение работает под моими доменными кредами и в БД ходит с ними. Я ж пишу, что если запустить Fiddler, то запросы к WCF работают. Я знаю, что Fiddler подставляет свой сертификат для TLS, но не знаю, что мне делать с этим знанием.

T>посмотри, как в WCF tracing конфигурируется, чуть побольше деталей увидишь того, что там не так


Да, понять бы, как трассировка WCF конфигурируется в .Net Core...
Re[3]: Запрос к WCF из ASP.NET Core
От: takTak  
Дата: 22.04.19 08:09
Оценка:
Y>Да, понять бы, как трассировка WCF конфигурируется в .Net Core...


ты пробывал это:
https://docs.microsoft.com/en-us/dotnet/framework/wcf/diagnostics/tracing/configuring-tracing

и это:
https://github.com/dotnet/wcf/blob/master/Documentation/HowToUseETW.md

и ничего не появляется?

какой там WCF Binding у WCF сервера и как он хостится?
Re[3]: Запрос к WCF из ASP.NET Core
От: takTak  
Дата: 22.04.19 08:21
Оценка:
для application pool ap.config настроено ?

<configuration> 
    <runtime> 
    <legacyImpersonationPolicy enabled="false"/> 
        <alwaysFlowImpersonationPolicy enabled="true"/> 
    </runtime> 
</configuration>


// Invoke a service operation asynchronously with impersonation. 
static async void Demo() { 
using (CalculatorClient client = new CalculatorClient()) 
    { // Enable the server to impersonate. 
    client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; 
    // Open the client before the first asynchronous request. 
    client.Open(); 
    // Invoke the Add operation asynchronously and display the result. 
    double result = await client.AddAsync(1.0, 2.0); 
    Console.WriteLine("Add returned {0}", result); 
    client.Close(); 
    } 
}


wireshark-ом можешь ещё ,наверное, трафик посмотреть
Re: Запрос к WCF из ASP.NET Core
От: yenik  
Дата: 22.04.19 10:09
Оценка:
Y>CommunicationException: Authentication failed because the connection could not be reused.

Пока вылечилось так: https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-2-1#sockets-improvements

SocketsHttpHandler is the default implementation in .NET Core 2.1. However, you can configure your application to use the older HttpClientHandler class by calling the AppContext.SetSwitch method:
C#

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

You can also use an environment variable to opt out of using sockets implementations based on SocketsHttpHandler. To do this, set the DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER to either false or 0.


Будем держать пальцы крестиком. На научные изыскания больше времени нет. Спасибо коллеге takTak за неравнодушие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.