我开发了与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授权:
我的错误在哪里?
答案 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用户)