我在同时调用WCF服务时遇到了问题。我尝试使用Tasks来并行调用两个服务以节省时间(我不想将此设置为异步),但我的任务是以另一个用户运行的。由于调用服务的用户没有所需权限,因此两个服务的调用都失败了,这是由于两个服务都需要Windows身份验证。
下面的调用代码位于ASP.NET MVC4控制器操作内,在IIS 7.5上运行。所有涉及的应用程序池都设置为允许ASP.NET模拟和需要Windows身份验证(所有其他方法均设置为禁用)。
下面的调用代码位于ASP.NET MVC4控制器操作内,在IIS 7.5上运行。所有涉及的应用程序池都设置为允许ASP.NET模拟和需要Windows身份验证(所有其他方法均设置为禁用)。
// Parallel service request to two services
Task<object>[] tasks = new Task<object>[2];
// this shows my credentials, e.g. "MYDOMAIN\\MyUsername"
var userMe = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
tasks[0] = Task<object>.Factory.StartNew(() =>
{
// this shows "IIS APPPOOL\\DefaultAppPool"
var user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
var data = client1.MyMethod();
return data;
});
tasks[1] = Task<object>.Factory.StartNew(() =>
{
// this shows "IIS APPPOOL\\DefaultAppPool"
var user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
var data = client2.MyMethod();
return data;
});
Task.WaitAll(tasks);
我的问题:如何指示任务以当前用户的身份运行,而不是作为"IIS APPPOOL\DefaultAppPool"用户运行?