【问题标题】:.NET 2005 - Testing through IIS runs as x86. Unit Testing runs as x64.NET 2005 - 通过 IIS 进行测试以 x86 运行。单元测试以 x64 运行
【发布时间】:2012-03-31 02:23:11
【问题描述】:

我在这里遇到了一个难题。

我的开发盒是 64 位的,Windows 7。 我所有的项目都编译为“任何 CPU”。 该项目正在引用 64 位版本的 3rd 方软件

当我运行不使用任何网络引用的单元测试时,它可以正常工作。我可以说它作为 64 位进程运行。我可以调用我的命令,它们运行良好。

但是,每当我运行一个调用我自己 PC 的 Web 服务调用的测试时,该代码就会返回告诉我它以 32 位/x86 运行。 Web 服务与单元测试完全相同,但它测试 Web 服务/SOAP 代理(实际上它调用相同的代码,除了通过 Web 服务)。

我一直在努力解决这个问题。我检查了所有第 3 方 dll,并确保它们编译为 32/64 位,并通过快速单元测试进行验证。我不确定为什么通过 IIS 的任何东西都将其变为 32 位。

似乎任何通过 IIS 的东西都将代码运行为 32 位而不是 64 位。

有什么想法吗?

【问题讨论】:

  • 我不确定我是否完全理解了这个问题。您是说当您与本地 IIS 上托管的 Web 服务通信时,您的进程以 32 位运行?或者您是说 IIS 中托管的服务告诉您它们正在运行并且是 32 位的?
  • @mockobject - 是的。如果我调用 Web 服务,我的代码以 32 位运行。如果我直接调用它(相同的服务起点或任何地方),它会以 64 位运行。
  • 您不应该在单元测试中调用 Web 服务。模拟 Web 服务调用。
  • 我们的黑盒/系统测试将验证从头到尾的路径,其中包括多个服务调用。但是,白盒/单元测试(对我们来说包括集成测试)只执行其中一个调用,需要一个简单的 Web 服务测试来测试白盒代码。

标签: c# iis visual-studio-2005 x86 64-bit


【解决方案1】:

我遇到了在 Windows 7 64 位的 AnyCPU 编译中引用的 32 位 DLL 的问题,导致我的应用程序出错。我发现我需要做以下事情:

打开 IIS > 深入了解应用程序池 > {您的应用程序池} > 高级设置并将启用 32 位应用程序属性设置为 True。

不确定这是否与您的问题特别相关,但可能需要检查一下?

【讨论】:

  • 找到它 - 它已经设置为 true。如果它是假的,将看看它是如何工作的。 =D
  • 似乎将其更改为错误的作品 - 将确保其充分发挥作用。
  • 好,对你来说似乎是另一种方式=D
  • 这对我来说很有趣。我假设通过将此设置为 false,它会强制服务以 64 位运行,并且如果它尝试使用 dllimport 之类的东西调用 32 位 dll,则会失败。我不明白的事情:1)如果服务能够以 64 位运行,为什么它们会以 32 位运行。 2) 为什么服务代理调用在一个完全独立的进程中与托管在 32 位进程中的服务进行对话会导致调用进程以 32 位运行。
猜你喜欢
  • 2016-11-18
  • 2015-12-04
  • 2012-11-28
  • 1970-01-01
  • 2023-03-21
  • 2011-07-09
  • 2022-01-17
  • 1970-01-01
  • 2016-02-22
相关资源
最近更新 更多