我的程序包装第三方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()
的调用会通过Internet将事务成功发送到FirstData,但我的应用程序在 的某处崩溃w3wp.exe >那个电话,在它到达下一行之前。它不会抛出我可以看到的托管异常;它只是崩溃了。除了在IIS7中,我的机器上的每个地方都可以正常工作。
我正在运行64位Vista家庭高级版(IIS7),但我在IIS中启用了32位应用程序,为此Web服务创建了一个单独的AppPool,并将所有程序集强制转换为x86。我尝试使用管理员权限而不是网络服务在我的用户帐户下运行应用程序池。 UAC已关闭。我尝试过集成和经典模式。我已在本地防火墙中明确打开了LinkPointTransaction.dll用于与FirstData通信的TCP / IP端口。我甚至关闭了防火墙(在路由器后面)。
根据我列出的所有这些变通方法, 始终 在Windows应用中以及VS Development Server内的Web服务中工作,但从不在本地IIS服务器中工作。
IIS网站的AppPool处于经典模式。 (回应 吉顿)
答案 0 :(得分:4)
我不认为这是一个编程问题,所以我'回答'它。
使用WinDbg,我已将其跟踪到供应商提供的dll。当应用程序崩溃时,它看起来像dll解除分配内存的方式有问题。调用堆栈在dll中显示无内存操作,然后是内核中的“无堆”操作,然后是ntdll中的“自由堆”操作,以及随后的“报告堆失败”(然后是RtlReportCriticalFailure)整件事。
我仍然不明白为什么它在Windows窗体应用程序和IIS 6中有效,但在IIS 7中不起作用。但是,这已成为一个平台问题,而不是“编程”问题。此外,供应商有责任修复它而不是我的工作。
更新:在向供应商提交技术支持服务单后的两天内,他们提供了一组更新的集成DLL,这些集成DLL使用您在regsvr32中注册的COM对象,并且可以在IIS7中运行如果您在WOW64目录中注册它,则为64位。 YEA获得第一数据技术支持!
答案 1 :(得分:1)
我向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请求发送事务。有关Webservice API的其他信息,请访问http://www.firstdata.com/downloads/marketing-merchant/FDGG-Web-Service-API-v4.0.pdf。
如果您需要进一步说明或疑问,请通过以下电话号码联系我们的支持中心。请注意,API支持服务台的工作时间为周一至周五上午9:00至下午6:00。
这可以帮助其他人在将来寻找类似的信息。
答案 2 :(得分:0)
如何在IIS7中配置网站?如果它在集成模式下运行,请切换到经典模式。见Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0
答案 3 :(得分:0)
我遇到了一个非常类似的问题,经过几天的捣乱,我逐渐意识到,如果我在MSTest中反复运行相同的代码,有时它会失败并完全崩溃测试过程,其他它很好。
真正奇怪的是,它在调试MSTest时最常发生,但是,如果我在测试方法中单击,然后在主按钮栏上单击“在当前上下文中调试测试”,那么它几乎总是失败。如果我通过单击“测试结果”窗口中的“调试”来运行测试,那么它几乎总是正确传递。
如果我不在调试模式下运行,它几乎总能正常工作,但有时仍会失败。就2个不同的VisualStudio 2010实例中的2个不同项目之间的完全相同的代码而言,我甚至是gona,并且其中一个代码将正常运行,而在另一个代码中它将失败。