TFS2012 / IIS7.5和Windows授权

时间:2012-09-19 16:52:58

标签: iis iis-7.5 tfs2012

我开发了与TFS2012合作的网络应用程序。在我的本地机器上它工作正常,但是当我在服务器上部署时,我得到以下异常:

[WebException:远程服务器返回错误:(401)未经授权。]    System.Net.HttpWebRequest.GetResponse()+ 6440920    Microsoft.TeamFoundation.Client.Channels.TfsHttpWebRequest.SendRequestAndGetResponse(HttpWebRequest webRequest,WebException& webException)+195

我与TFS代码的连接:

            _collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://xxx/tfs/TestPrjects/"));
            _collection.EnsureAuthenticated();
            _store = _collection.GetService<WorkItemStore>();

我的网络配置:

<system.web>
  <customErrors mode="Off"></customErrors>
  <authentication mode="Windows"/>
  ...
<system.web>
在ISS中我激活Windows授权:

enter image description here

我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

您用于访问TFS的详细信息不正确。

它在本地计算机上运行的原因是因为Web服务器正在运行,您可以访问TFS。在IIS服务器上,它作为应用程序池用户运行,该用户无权访问。

潜在解决方案

以有权访问TFS的用户身份运行应用程序池(或授予当前用户访问权限)
这对于只读访问是可以的,但如果您要回写项目,则可能不想沿着这条路线前进

启用委派,以便连接到TFS的代码作为当前经过身份验证的Windows用户运行 这是很难做到的,只能在开箱即用的Internet Explorer中使用。 Firefox用户可以更改设置,Chrome用户需要使用命令行开关启动Chrome。

围绕使用TFS的代码包装使用(WindowsIdentity.GetCurrent()。Impersonate()){}并确保使用CredentialCache.DefaultNetworkCredentials连接到TFS。

使用TFS服务器API 顽皮并使用服务器而不是客户端api。服务器API直接写入数据库,不需要模拟用户。我非常怀疑这是一条支持的路径,你不会发现它有太多信息。但是它仍然需要作为具有数据库访问权限的用户运行(如选项1,但支持更新为Windows authed用户)