我遇到了並行調用WCF服務的問題。我試圖使用任務並行地調用兩個服務來節省一些時間(我不試圖使這個異步),但我的任務正在作爲另一個用戶運行。這兩個服務都需要Windows身份驗證,並且這兩個調用都會失敗,因爲調用服務的用戶沒有所需的權限。如何在調用Task.WaitAll()時爲任務設置用戶標識?
調用代碼(代碼如下)位於ASP.NET MVC4的Controller Action中,運行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 \默認應用」用戶?
大部分由IIS只爲特殊用戶帳戶運行服務代碼。任何理由擺脫沙箱運行它作爲另一個用戶?它不是一個文件訪問函數...... – Jasper 2013-04-22 14:29:17
Jasper:我調用的服務都使用Kerberos/Windows身份驗證,並要求客戶端通過身份驗證和授權(通過AD角色)才能使用它。這就是爲什麼我必須使用正確的憑證調用它們。 – Valdemar 2013-04-22 21:13:42