Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TFS2012/IIS7.5和Windows授权_Iis_Iis 7.5 - Fatal编程技术网

TFS2012/IIS7.5和Windows授权

TFS2012/IIS7.5和Windows授权,iis,iis-7.5,Iis,Iis 7.5,我开发了web应用程序,它与TFS2012合作。在我的本地计算机中,它可以正常工作,但当我在服务器上部署时,会出现以下异常: [WebException:远程服务器返回错误:(401)未经授权。] System.Net.HttpWebRequest.GetResponse()+6440920 Microsoft.TeamFoundation.Client.Channel.TfsHttpWebRequest.SendRequestAndGetResponse(httpWebRequestWebRe

我开发了web应用程序,它与TFS2012合作。在我的本地计算机中,它可以正常工作,但当我在服务器上部署时,会出现以下异常:

[WebException:远程服务器返回错误:(401)未经授权。] System.Net.HttpWebRequest.GetResponse()+6440920 Microsoft.TeamFoundation.Client.Channel.TfsHttpWebRequest.SendRequestAndGetResponse(httpWebRequestWebRequest、WebException和WebException)+195

我的连接到TFS代码:

            _collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://xxx/tfs/TestPrjects/"));
            _collection.EnsureAuthenticated();
            _store = _collection.GetService<WorkItemStore>();
\u collection=tfstreamprojectcollectionfactory.GetTeamProjectCollection(新Uri(“http://xxx/tfs/TestPrjects/"));
_集合。确保重新验证();
_store=_collection.GetService();
我的web配置:

<system.web>
  <customErrors mode="Off"></customErrors>
  <authentication mode="Windows"/>
  ...
<system.web>

...
在ISS中,我激活Windows授权:


我的错误在哪里?

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

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

潜在解决方案 以有权访问TFS的用户身份运行应用程序池(或授予当前用户访问权限)
这对于只读访问来说是可以的,但是如果您要写回条目,您可能不想走这条路

启用委派,以便连接到TFS的代码以当前已验证的windows用户身份运行 这要难得多,而且只能在internet explorer中开箱即用。Firefox用户可以更改设置,Chrome用户需要使用命令行开关启动Chrome

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

使用TFS服务器API
淘气点,用服务器代替客户端api。服务器API直接写入数据库,不需要模拟用户。我非常怀疑这是一条受支持的路径,并且你不会找到太多关于它的信息。但是,它仍然需要以具有db访问权限的用户身份运行(与选项1类似,但支持以windows授权用户身份进行更新)

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

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

潜在解决方案 以有权访问TFS的用户身份运行应用程序池(或授予当前用户访问权限)
这对于只读访问来说是可以的,但是如果您要写回条目,您可能不想走这条路

启用委派,以便连接到TFS的代码以当前已验证的windows用户身份运行 这要难得多,而且只能在internet explorer中开箱即用。Firefox用户可以更改设置,Chrome用户需要使用命令行开关启动Chrome

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

使用TFS服务器API 淘气点,用服务器代替客户端api。服务器API直接写入数据库,不需要模拟用户。我非常怀疑这是一条受支持的路径,并且你不会找到太多关于它的信息。但是,它仍然需要以具有db访问权限的用户身份运行(与选项1类似,但支持以windows授权用户身份进行更新)