简体   繁体   English

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

[英]LinkPoint payment integration with IIS7 crashes w3wp.exe

My assemblies that wrap a third-party DLL work fine in my windows test harness app, and they also work fine in a web service when spawned in debug mode (VS 2008 Visual Studio Development Server)! 我的组件在我的Windows测试工具的应用程序包第三方DLL做工精细 ,他们在调试模式(VS 2008的Visual Studio开发服务器)时,产生了一个Web服务工作得很好! However, the app always crashes when running in the local IIS 7 web server. 但是,在本地IIS 7 Web服务器中运行时,应用程序始终崩溃。 Here is the crash detail from the event log when running on the local IIS server: 以下是在本地IIS服务器上运行时事件日志中的崩溃详细信息:

Faulting application w3wp.exe, version 7.0.6001.18000, time stamp 0x47919413, faulting module ntdll.dll, version 6.0.6001.18000, time stamp 0x4791a783, exception code 0xc0000374, fault offset 0x000aada3, process id 0x990, application start time 0x01c9b4133281d5d0. 故障应用程序w3wp.exe,版本7.0.6001.18000,时间戳0x47919413,故障模块ntdll.dll,版本6.0.6001.18000,时间戳0x4791a783,异常代码0xc0000374,故障偏移0x000aada3,进程ID 0x990,应用程序启动时间0x01c9b4133281d5d0。

Discussion: I wrote a wrapper around a .NET dll from a third-party (LinkPointTransaction.dll from FirstData), and I wrote some other assemblies that reference that wrapper. 讨论:我在第三方(来自FirstData的LinkPointTransaction.dll)的.NET dll周围编写了一个包装器,并编写了一些引用该包装器的其他程序集。 As the code is running, a call to the third-party LinkPointTransaction.LinkPointTxn.Send() sends the transaction successfully to FirstData over the internet, but my application crashes w3wp.exe somewhere during that call, before it hits the next line. 当代码运行时,对第三方LinkPointTransaction.LinkPointTxn.Send()的调用会通过Internet将事务成功发送到FirstData,但是我的应用程序该调用期间的某个位置崩溃了w3wp.exe,然后才能到达下一行。 It does not throw a managed exception that I can see; 它不会抛出我可以看到的托管异常; it just crashes. 它只是崩溃了。 Works fine everywhere on my machine except in IIS7. 除了在IIS7中,我的机器上到处都可以正常工作。

I am running 64bit Vista Home Premium (IIS7), but I enabled 32bit apps in IIS, created a separate AppPool just for this web service, and have forced all of my assemblies to x86. 我正在运行64位Vista家庭高级版(IIS7),但我在IIS中启用了32位应用程序,为此Web服务创建了一个单独的AppPool,并将所有程序集强制转换为x86。 I have tried running the App Pool under my user account with Admin privileges instead of as the Network Service. 我尝试使用管理员权限而不是网络服务在我的用户帐户下运行应用程序池。 UAC is turned off. UAC已关闭。 I have tried Integrated and Classic modes. 我尝试过集成和经典模式。 I have explicitly opened the TCP/IP port in my local firewall that the LinkPointTransaction.dll uses to communicate with FirstData. 我已在本地防火墙中明确打开了LinkPointTransaction.dll用于与FirstData通信的TCP / IP端口。 I even have shut my firewall off (behind a router). 我甚至关闭了防火墙(在路由器后面)。

With any of these workarounds that I listed, it always works in a Windows app and also in a web service inside the VS Development Server, but never works in the local IIS server. 通过我列出的任何这些变通方法,它始终可以在Windows应用程序中运行,也可以在VS Development Server内的Web服务中运行,但从不在本地IIS服务器中运行。

The AppPool for the IIS website is in Classic mode. IIS网站的AppPool处于经典模式。 (In response to Gidon) (回应Gidon)

I don't think this is a programming question anymore, so I am 'answering' it. 我不认为这是一个编程问题,所以我'回答'它。

Using WinDbg, I have tracked it down to the dll provided by the vendor. 使用WinDbg,我已将其跟踪到供应商提供的dll。 When the app crashes, it looks like a problem with the way the dll is de-allocating memory. 当应用程序崩溃时,它看起来像dll解除分配内存的方式有问题。 The call stack shows a memory free operation in the dll, then a "heap free" operation in the kernel, then a "free heap" operation in ntdll, and a subsequent "report heap failure" (and then RtlReportCriticalFailure) that tears down the whole thing. 调用堆栈在dll中显示无内存操作,然后是内核中的“无堆”操作,然后是ntdll中的“自由堆”操作,以及随后的“报告堆失败”(然后是RtlReportCriticalFailure)整件事情。

I still don't understand why it works in a Windows Forms app and in IIS 6, but not work in IIS 7. However, this has become more of a platform question than a 'programming' question. 我仍然不明白它为什么在Windows窗体应用程序和IIS 6中工作,但在IIS 7中无法工作。但是,这已成为一个平台问题,而不是“编程”问题。 Besides, it is probably the vendor's responsibility to fix it rather than mine to work around it. 此外,供应商可能有责任修复它而不是我的解决方案。

UPDATE : Within two days of filing the tech support ticket with the vendor, they provided an updated set of the integration DLLs that use a COM object that you register with regsvr32, and it works in IIS7 64-bit if you register it in the WOW64 directory. 更新 :在向供应商提交技术支持票据的两天内,他们提供了一组更新的集成DLL,它们使用您在regsvr32中注册的COM对象,如果您在WOW64中注册它,它在64位IIS7中工作目录。 YEA FOR FIRST DATA TECHNICAL SUPPORT! YEA获得第一数据技术支持!

I asked First Data about the DLLs and being able to run it on IIS7/.NET 4/Win 2008 64-bit. 我向First Data询问了DLL,并能够在IIS7 / .NET 4 / Win 2008 64位上运行它。 This was their response: 这是他们的回应:

Thank you for your recent inquiry regarding First Data Global Gateway. 感谢您最近有关First Data Global Gateway的查询。 The Webservice API is our current solution for 64 bit machines running on IIS 7 as none of the dll files (Linkpointtransaction.dll, LPICOM_6_.dll) will be updated to work with the 64bit server. Webservice API是我们当前在IIS 7上运行的64位计算机的解决方案,因为没有任何dll文件(Linkpointtransaction.dll,LPICOM_6_.dll)将更新为与64位服务器一起使用。 Webservice API will require to install the client certificate and send the transaction via SOAP request. Webservice API将要求安装客户端证书并通过SOAP请求发送事务。 Additional information on Webservice API is found at http://www.firstdata.com/downloads/marketing-merchant/FDGG-Web-Service-API-v4.0.pdf . 有关Webservice API的更多信息, 请访问http://www.firstdata.com/downloads/marketing-merchant/FDGG-Web-Service-API-v4.0.pdf

If you need further clarifications or questions, please contact our support desk via phone number below. 如果您需要进一步的说明或问题,请通过以下电话号码联系我们的支持中心。 Please be advised the API support desk hours is from 9:00AM to 6:00PM EST Mon-Fri. 请注意,API支持服务台的工作时间为周一至周五的上午9:00至下午6:00。

This should help others looking for similar information in the future. 这应该有助于其他人在将来寻找类似的信息。

I've had a very similar issue, and after messing with it for days, I've come to realize that if I run the same code over and over in MSTest, sometimes it fails and completely crashes the test process, other times it works fine. 我有一个非常类似的问题,经过几天的捣乱,我逐渐意识到,如果我在MSTest中反复运行相同的代码,有时它会失败并完全崩溃测试过程,有时它会工作精细。

The really strange thing is that it happens most often when debugging an MSTest, BUT, if I click inside the test method, then on the main buttonbar click "debug tests in current context" then it almost always fails. 真正奇怪的是它在调试MSTest时最常发生,但是,如果我在测试方法中单击,然后在主按钮栏上单击“在当前上下文中调试测试”,那么它几乎总是失败。 If I instead run the test by clicking "debug" in the "Test Results" window, then it almost always passes correctly. 如果我通过单击“测试结果”窗口中的“调试”来运行测试,那么它几乎总是正确传递。

It also almost always works correctly if I do not run in debug mode, but does still sometimes fail. 如果我不在调试模式下运行,它也几乎总能正常工作,但有时仍会失败。 I've even gona as far as copy/pastign the exact same code between 2 different projects in 2 different VisualStudio 2010 instances, and in one of them the code will run properly, and in another it will fail. 就2个不同的VisualStudio 2010实例中的2个不同项目之间的完全相同的代码而言,我甚至是gona,并且其中一个代码将正常运行,而在另一个代码中它将失败。

How is the website configured in IIS7? 如何在IIS7中配置网站? If it is running in Integrated Mode switch to Classic Mode. 如果它在集成模式下运行,请切换到经典模式。 See Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0 请参阅IIS 7.0上以集成模式运行的ASP.NET 2.0应用程序的重大更改

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM