【发布时间】:2016-12-14 10:32:05
【问题描述】:
我有 ASP.Net 应用程序,它使用 TFS API 并在域下工作。问题是本地一切正常。部署到配置为使用 ApplicationPoolIdentity 的 IIS 后,我的应用程序给我 500 Internal Server Error。当我将 Identity 设置为使用我的用户名和密码时,一切正常。应用使用Windows认证,被多个用户使用。
我们正在向 TFS 提交数据,如果将身份配置为我的用户名,则在 TFS 历史记录中它显示我已经修改了该项目。我们需要它是实际进行修改的用户。
之前在某些地方,比如“Assigned To”或“Deployed By”,我使用过
var currentDisplayName = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;
发现这个问题后,用
解决了var currentDisplayName = System.Web.HttpContext.Current.User.Identity.Name;
但是当我使用 Identity - ApplicationPoolIdentity 时,应用程序无法运行的问题。
我获得团队项目集合的方法:
var tfsTeamProjectUrl = ConfigurationProvider.TfsTeamProjectUrl;
var teamProjectCollection = new TfsTeamProjectCollection(new Uri(tfsTeamProjectUrl));
teamProjectCollection.EnsureAuthenticated();
return teamProjectCollection;
在本地这工作正常,但在 IIS 上,它想使用来自 IIS 应用程序池的身份,但我需要它使用来自实际用户的凭据。
更新 我试图通过这样做来模拟实际用户:
var tfsTeamProjectUrl = ConfigurationProvider.TfsTeamProjectUrl;
var baseUserConnection = new TfsTeamProjectCollection(new Uri(tfsTeamProjectUrl));
var ims = baseUserConnection.GetService<IIdentityManagementService>();
var username = System.Web.HttpContext.Current.User.Identity.Name;
var identity = ims.ReadIdentity(IdentitySearchFactor.AccountName, username,
MembershipQuery.None, ReadIdentityOptions.None);
var teamProjectCollection = new TfsTeamProjectCollection(new Uri(tfsTeamProjectUrl), identity.Descriptor);
teamProjectCollection.EnsureAuthenticated();
return teamProjectCollection;
但现在我开始了
Microsoft.TeamFoundation.Client.dll 中出现“Microsoft.TeamFoundation.TeamFoundationServerInvalidResponseException”类型的异常,但未在用户代码中处理 附加信息:请联系您的管理员。联系服务器时出错。 技术信息(针对管理员): HTTP 代码 500:内部服务器错误
【问题讨论】: