LinkPoint支付与IIS7集成导致w3wp.exe崩溃

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为0x990,应用程序启动时间为0x01c9b4133281d5d0。
讨论:我编写了一个包装器,封装了来自第三方(FirstData的LinkPointTransaction.dll)的.NET dll,并编写了一些引用该包装器的其他程序集。当代码正在运行时,对第三方LinkPointTransaction.LinkPointTxn.Send()的调用会成功地将事务发送到FirstData,但我的应用程序在它达到下一行之前在某个地方崩溃了w3wp.exe。它没有抛出我可以看到的托管异常;它只是崩溃了。除在IIS7外,它在我的机器上的任何地方都能正常运行。
我正在运行64位Vista Home Premium(IIS7),但我在IIS中启用了32位应用程序,为此Web服务创建了单独的AppPool,并强制所有程序集均为x86。我尝试使用具有管理员权限的用户帐户而不是Network Service运行应用程序池。UAC已关闭。我尝试了集成和经典模式。我已明确打开了本地防火墙中LinkPointTransaction.dll用于与FirstData通信的TCP/IP端口。我甚至关闭了我的防火墙(在路由器后面)。
无论我列出的任何这些解决方法,在Windows应用程序和VS开发服务器内部的Web服务中它总是工作正常,但永远不能在本地的IIS服务器中工作。
该IIS网站的AppPool处于Classic模式下。(针对Gidon的回复)

我遇到了同样的问题,但我的程序在一段时间内可以运行,但现在每次尝试在MSTest中运行时都会崩溃。没有任何异常被抛出。很高兴我不是唯一一个... - CodingWithSpike
4个回答

4

我认为这不再是一个编程问题,因此我会“回答”它。

使用WinDbg,我已经追踪到由供应商提供的dll。当应用程序崩溃时,看起来像是dll释放内存的方式有问题。调用栈显示dll中的内存释放操作,然后是内核中的“堆释放”操作,然后是ntdll中的“释放堆”操作,随后是“报告堆失败”(然后是RtlReportCriticalFailure),整个过程都被拆除了。

我仍然不明白为什么它在Windows Forms应用程序和IIS 6中运行正常,但在IIS 7中却不能正常工作。然而,这已经变成一个平台问题,而不是一个“编程”问题。此外,修复它可能是供应商的责任,而不是我的责任去解决它。

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


我已经与技术支持人员交谈并获得了更新的DLL文件。它大部分时间都能正常工作,但偶尔会出现一些问题,每天或者每隔一段时间就会“挂起”。我们开始收到COM相关的错误消息。通常情况下,重新启动应用程序池可以解决问题,但毫无疑问这不是一个解决方案。你那边工作正常吗?谢谢。 - pbz
提示:有时需要重新启动IIS7(64位),仅回收应用程序池是不够的。 - pbz
我们已经更换了商家网关公司。现在我们使用USAePay。 - Scott Fletcher
关于使用USAePay的情况,我们正在考虑转换到它,因为我们在使用Firstdata和ColdFusion时遇到了类似的问题。请问目前使用USAePay的情况如何? - DefconRhall
USAePay表现良好。像一个优秀的实用程序/提供商一样,我甚至已经忘记了我们使用它们。它只是继续工作。 - Scott Fletcher
我刚刚将接受的答案更改为Mike Wills——因为FirstData不再支持这些DLL。First Data还在业务中吗?谁知道呢。但我知道这个进程内DLL方案已经死了。美好的回忆之旅。 - Scott Fletcher

3
我向First Data询问了关于DLL文件在IIS7/.NET 4/Win 2008 64位服务器上的运行情况。他们的回复是:

感谢您近期就First Data Global Gateway提出的问题。我们的Webservice API是用于在运行在IIS 7的64位机器上的当前解决方案,因为Linkpointtransaction.dll和LPICOM_6_.dll等任何dll文件都不会被更新以与64位服务器兼容。Webservice API需要安装客户端证书并通过SOAP请求发送交易。有关Webservice API的其他信息,请访问http://www.firstdata.com/downloads/marketing-merchant/FDGG-Web-Service-API-v4.0.pdf

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

这将有助于将来寻找类似信息的其他人。


0

我也遇到了类似的问题,经过几天的尝试后,我意识到如果我在MSTest中反复运行同一段代码,有时会导致测试进程完全崩溃,而有时则可以正常工作。

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

如果我不以调试模式运行,它也几乎总是能够正常工作,但仍有时会失败。我甚至已经将完全相同的代码复制/粘贴到两个不同的Visual Studio 2010实例中的两个不同项目中,并且在其中一个项目中,代码将正常运行,在另一个项目中,代码将失败。


0

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


网站正在使用的AppPool运行在经典模式下。 - Scott Fletcher
你也检查了链接中的其他迁移错误吗?例如web.config中httphandlers和modules的新位置? - Gideon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接