【发布时间】:2014-03-04 21:34:41
【问题描述】:
我有一个在服务器上运行的 WCF 服务,它被配置为接受 Kerberos 身份验证。
Kerberos 工作正常,因此 WCF 服务知道哪个用户正在连接到他。 该服务以异步方法的形式提供一切。像这里这样(只是一个清晰的例子)。
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);
}
}
}
只要我不使用 await,模拟就可以正常工作。
由于Task<> 不流动模拟身份,我想知道是否有可能更改Task 的执行用户或做任何其他事情以使模拟在此使用中工作-案子。
我尝试了一个自定义等待器(因为它可以在这种情况下使用 Culture 完成),但这根本不起作用(它只是不能模拟)。
【问题讨论】:
标签: c# wcf asynchronous impersonation