У меня есть служба WCF, работающая на сервере, которая настроена на прием аутентификации Kerberos.Вызов службы async WCF при выдаче олицетворения
Kerberos отлично работает, поэтому служба WCF знает, какой пользователь подключается к нему. Служба предлагает все как методы Async. Как здесь (просто пример для ясности).
public ExampleService : IExampleService {
public Task<string> GetUsernameAsync() {
return await Task.Run(() => System.Threading.Thread.CurrentPrincipal.Name);
}
}
На стороне клиента У меня есть контроллер (что это MVC-страница, но это не имеет значения), который вызывает методы асинхронным.
public ExampleController {
public async Task<ActionResult> Index() {
using(var serviceClient = ServiceFactory.GetServiceClient())
using(Security.Impersonation.Impersonate())
{
var data = await serviceClient.GetUsernameAsync();
return View(data);
}
}
}
Игнорирование работает отлично, если я не использую его.
Поскольку Task<>
не течет олицетворяемую идентичность, я хотел бы знать, если есть возможность, чтобы изменить выполняющую пользователя о Task
или сделать что-нибудь еще, чтобы сделать олицетворения работы в этом сценарии использования.
Я попробовал пользовательский awaiter (как это может быть сделано с культурой в этом случае), но это не работает вообще (ну, это просто не олицетворяет себя).
Это означает, что я должен блокировать поток до 5 секунд, чем использовать async и ждать? – TGlatzer
Нет. Никакая блокировка не должна появляться. Но в то же время переключение нитей не должно происходить излишне. Вы должны прочитать [Stephen Cleary о том, как использовать 'async' и' Task'] (http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html) – Aron
А теперь я понимаю ваша точка, но Task.Run на стороне сервера было просто сокращенным объяснением. Но вы, вероятно, правы в этот момент. Но мой вопрос заключается не в стороне сервера - олицетворение терпит неудачу (или не протекает) на 'await' на стороне клиента. – TGlatzer