我有ASP.Net应用程序,它使用TFS API并在Domain下工作。问题是本地一切正常。部署到配置为使用ApplicationPoolIdentity的IIS后,我的应用程序给了我500内部服务器错误。当我设置身份使用我的用户名和密码时,一切正常。应用程序使用Windows身份验证,并由多个用户使用。
我们正在向TFS提交数据,如果将Identity配置为我的用户名,则在TFS历史记录中显示我已修改该项目。我们需要它成为实际进行修改的用户。
之前在某些地方,例如"分配给"或者"部署者"我用了
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 App Pools中的Identity,但我需要它来使用来自实际用户的凭据。
更新 我尝试通过这样做来冒充实际用户:
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;
但现在我开始
类型&#39; Microsoft.TeamFoundation.TeamFoundationServerInvalidResponseException&#39;的例外情况发生在Microsoft.TeamFoundation.Client.dll但未在用户代码中处理 其他信息:请与您的管理员联系。联系服务器时出错。 技术信息(针对管理员): HTTP代码500:内部服务器错误
答案 0 :(得分:0)
似乎IIS决定尝试使用应用程序池标识而不是您明确提供的凭据来访问TFS。您正在对服务器进行身份验证,但之后不使用服务器对象,因此应用程序恢复为其运行的任何身份。
尝试使用以下代码进行身份验证:
string tfsServerUrl = "http://servername:8080/tfs";
System.Net.NetworkCredential tfsCredential = new System.Net.NetworkCredential("ServiceAccountName", "password", "DOMAIN");
TfsConfigurationServer tfs = new TfsConfigurationServer(new Uri(tfsServerUrl), tfsCredential);
tfs.Authenticate();