3

我包装第三方 DLL 的程序集在我的 Windows 测试工具应用程序中运行良好,并且在以调试模式(VS 2008 Visual Studio 开发服务器)生成时,它们Web 服务中也运行良好!但是,应用程序在本地 IIS 7 Web 服务器中运行时总是崩溃。以下是在本地 IIS 服务器上运行时事件日志中的崩溃详细信息:

错误应用程序 w3wp.exe,版本 7.0.6001.18000,时间戳 0x47919413,错误模块 ntdll.dll,版本 6.0.6001.18000,时间戳 0x4791a783,异常代码 0xc0000374,错误偏移量 0x000aada3,进程 id 0x990143392c

讨论:我围绕来自第三方的 .NET dll(来自 FirstData 的 LinkPointTransaction.dll)编写了一个包装器,并且我编写了一些引用该包装器的其他程序集。在代码运行时,对第三方的调用LinkPointTransaction.LinkPointTxn.Send()通过 Internet 成功将事务发送到 FirstData,但我的应用程序在调用过程中的某个地方崩溃了 w3wp.exe,然后它到达下一行。它不会抛出我可以看到的托管异常;它只是崩溃。除了在 IIS7 中之外,在我的机器上的任何地方都可以正常工作。

我正在运行 64 位 Vista Home Premium (IIS7),但我在 IIS 中启用了 32 位应用程序,为此 Web 服务创建了一个单独的 AppPool,并将我的所有程序集强制为 x86。我尝试在具有管理员权限的用户帐户下运行应用程序池,而不是作为网络服务。UAC 已关闭。我尝试过集成和经典模式。我在本地防火墙中明确打开了 LinkPointTransaction.dll 用来与 FirstData 通信的 TCP/IP 端口。我什至关闭了我的防火墙(在路由器后面)。

使用我列出的任何这些变通方法,它始终可以在 Windows 应用程序和 VS 开发服务器内的 Web 服务中运行,但不能在本地 IIS 服务器中运行。

IIS 网站的 AppPool 处于经典模式。(回应吉顿)

4

4 回答 4

4

我认为这不再是一个编程问题,所以我正在“回答”它。

使用 WinDbg,我已将其追踪到供应商提供的 dll。当应用程序崩溃时,看起来 dll 取消分配内存的方式存在问题。调用堆栈显示 dll 中的内存释放操作,然后是内核中的“heap free”操作,然后是 ntdll 中的“free heap”操作,以及随后的“report heap failure”(然后是 RtlReportCriticalFailure)整件事情。

我仍然不明白为什么它在 Windows 窗体应用程序和 IIS 6 中有效,但在 IIS 7 中无效。但是,这已成为一个平台问题,而不是“编程”问题。此外,修复它可能是供应商的责任,而不是我来解决它。

更新:在向供应商提交技术支持票的两天内,他们提供了一组更新的集成 DLL,这些 DLL 使用您在 regsvr32 中注册的 COM 对象,如果您在 WOW64 中注册,它可以在 IIS7 64 位中运行目录。是的,第一个数据技术支持!

于 2009-04-03T21:00:20.123 回答
3

我向 First Data 询问了有关 DLL 的信息以及能否在 IIS7/.NET 4/Win 2008 64 位上运行它。这是他们的回应:

感谢您最近对 First Data Global Gateway 的询问。Webservice API 是我们当前针对在 IIS 7 上运行的 64 位计算机的解决方案,因为没有任何 dll 文件(Linkpointtransaction.dll、LPICOM_6_.dll)将被更新以适用于 64 位服务器。Webservice API 将需要安装客户端证书并通过 SOAP 请求发送交易。有关 Web 服务 API 的更多信息,请访问 http://www.firstdata.com/downloads/marketing-merchant/FDGG-Web-Service-API-v4.0.pdf

如果您需要进一步的说明或问题,请通过下面的电话号码联系我们的支持台。请注意,API 支持服务台时间为美国东部标准时间周一至周五上午 9:00 至下午 6:00。

这应该有助于其他人在未来寻找类似的信息。

于 2011-08-15T15:23:23.557 回答
0

IIS7中的网站是如何配置的?如果它在集成模式下运行,请切换到经典模式。请参阅在 IIS 7.0 上以集成模式运行的 ASP.NET 2.0 应用程序的重大更改

于 2009-04-03T07:03:20.340 回答
0

我遇到了一个非常相似的问题,在搞砸了几天之后,我开始意识到,如果我在 MSTest 中一遍又一遍地运行相同的代码,有时它会失败并完全使测试过程崩溃,而其他时候它可以工作美好的。

真正奇怪的是,它最常发生在调试 MSTest 时,但是,如果我在测试方法内部单击,然后在主按钮栏上单击“在当前上下文中调试测试”,那么它几乎总是失败。如果我通过单击“测试结果”窗口中的“调试”来运行测试,那么它几乎总是正确通过。

如果我不在调试模式下运行,它也几乎总是可以正常工作,但有时仍然会失败。我什至在 2 个不同的 VisualStudio 2010 实例中的 2 个不同项目之间复制/粘贴完全相同的代码,其中一个代码将正常运行,而在另一个它将失败。

于 2011-03-29T17:48:42.790 回答