【问题标题】:TFS API not working in ASP.NET MVC application when running in IIS and connecting to Visual Studio Online在 IIS 中运行并连接到 Visual Studio Online 时,TFS API 在 ASP.NET MVC 应用程序中不起作用
【发布时间】:2013-12-18 01:11:13
【问题描述】:

我正在构建一个连接到 TFS 的 ASP.NET MVC 应用程序。该应用程序显示带有测试计划、套件和测试用例的树。

当应用程序在 Visual Studio 2012 Update 3 中运行时,连接到我的开发计算机上安装的 TFS 实例或连接到 Visual Studio Online 时一切正常。当我在本地 IIS 上部署 ASP MVC 应用程序时,它在连接到本地 TFS 时仍然有效。但是,当连接到 Visual Studio Online 时,TFS API 给了我错误“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。”当我获取测试计划下的条目时,访问 ITestPlan.RootSuite.Entries 时。

可能是什么问题或解决方案?

更多信息:

我引用了以下程序集,所有版本均为 11.0.0.0

  • Microsoft.TeamFoundation.Build.Common.dll
  • Microsoft.TeamFoundation.Client.dll
  • Microsoft.TeamFoundation.Common.dll
  • Microsoft.TeamFoundation.dll
  • Microsoft.TeamFoundation.TestManagement.Client.dll
  • Microsoft.TeamFoundation.TestManagement.Common.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.dll

在 Visual Studio 中运行时,ASP MVC 应用程序在 IISExpress 中运行并加载以下程序集(根据输出窗口):

GAC_MSIL

  • Microsoft.TeamFoundation.Client.dll
  • Microsoft.TeamFoundation.Common.dll
  • Microsoft.TeamFoundation.dll
  • Microsoft.TeamFoundation.TestManagement.Client.dll
  • Microsoft.TeamFoundation.TestManagement.Common.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Common.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll

GAC_32

  • Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll

在 IIS 中运行时,会加载以下程序集(根据进程监视器):

C:\WINDOWS\assembly\NativeImages_v4.0.30319_32\

  • Microsoft.TeamFoundation.Client.ni.dll
  • Microsoft.TeamFoundation.Common.ni.dll
  • Microsoft.TeamFoundation.Diff.ni.dll
  • Microsoft.TeamFoundation.TestManagement.Client.ni.dll
  • Microsoft.TeamFoundation.TestManagement.Common.ni.dll
  • Microsoft.TeamFoundation.VersionControl.Client.ni.dll
  • Microsoft.TeamFoundation.VersionControl.Common.Integration.ni.dll
  • Microsoft.TeamFoundation.VersionControl.Common.ni.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.ni.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.ni.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.ni.dll
  • Microsoft.TeamFoundation.WorkItemTracking.Common.ni.dll

C:\WINDOWS\程序集\GAC_32\

  • Microsoft.WITDataStore.dll

不同之处在于 IISExpress 加载 MSIL 版本的程序集,而 IIS 加载本机映像。并且 IIS 加载 VersionControl 程序集和 Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll,以及 Microsoft.TeamFoundation.Diff.ni.dll 而不是 Microsoft.TeamFoundation.dll。这对我来说似乎很奇怪,我无法解释。

在 IIS 中运行与本地 TFS 或 TFS Online 通信时,会加载相同的程序集。我可以从中得出的唯一结论是从服务器返回的数据是不同的。但这个结论与 IISExpress 中的 Web 应用程序可以处理 TFS Online 数据这一事实相矛盾。

【问题讨论】:

  • 第一次 TFS 调用失败还是后续调用失败?
  • 我检查 ITestPlan.RootSuite 或 ITestPlan.RootSuite.Entries 是否为空,但显然在检查这个或在 ITestPlan.RootSuite.Entries 上执行 foreach 循环时,某些东西会发出无效调用并抛出此异常。
  • 我试图找出它是否在第一次 TFS 调用时失败。如果它在第一次调用时失败,那么它是 all TFS 调用的问题。
  • 我想误解了你。我设法登录并获取项目中的所有测试计划。所以获取测试计划下的条目并不是第一次调用 TFS。

标签: asp.net iis tfs


【解决方案1】:

这是我能找到的唯一一篇与我遇到的类似问题相关的帖子,我想我会分享我找到的解决方案。我正在制作一个 Web 应用程序,以从链接到特定项目版本的 TFS 变更集生成 XML。我遇到了一个问题,我创建的 Web 应用程序将在 Visual Studio 的 IIS Express 中运行,但是在 IIS 中设置时,当我使用“Microsoft.TeamFoundation.WorkItemTracking.Client”命名空间中的某些内容时它失败了。在没有 VS 调试工具的情况下挣扎了一段时间后(我对编码还很陌生,可能有一种正确的调试方法),我发现我收到了“TF30063:您无权访问http://(server)”错误。

无论如何解决方案: 在 IIS 中,转到您的应用程序池-高级设置-进程模型-身份并将其更改为自定义帐户,将您的用户名和密码设置为您的 TFS 用户名和密码。

我知道这是一篇旧帖子,这可能不是原始发帖人的问题,但我想我还是会发布它以防它对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2012-09-25
    相关资源
    最近更新 更多