0

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

[WebException:远程服务器返回错误:(401) Unauthorized。] 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 授权:

在此处输入图像描述

我的错误在哪里?

4

1 回答 1

3

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

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

潜在的解决方案

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

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

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

使用 TFS 服务器 API 调皮一点,使用服务器而不是客户端 API。服务器 API 直接写入数据库,不需要模拟用户。我非常怀疑这是一个受支持的路径,你不会找到太多关于它的信息。但是,它仍然需要以有权访问数据库的用户身份运行(如选项 1,但支持作为 windows authed 用户进行更新)

于 2012-09-24T03:52:30.890 回答