3

我正在为 .NET 运行 Microsoft POS。我有一个连接到计算机的现金抽屉、条形码扫描仪和收据打印机。使用 Microsoft POS for .NET 测试应用程序,它们都可以正常工作。

我们的应用程序是 IIS 中的 ASP.NET Web 应用程序。因此,我们从 Web 应用程序的服务器端实例化 OPOS 设备,一切正常。自 Windows XP / IIS 5.1 以来,我们一直在这样做。

我们现在正在将我们的部署计算机升级到 Windows 7。我们的开发计算机可以毫无问题地运行此方案。但是,在我目前使用的部署计算机上,我遇到了两个问题:

问题 1)

条形码扫描仪挂在 Open() 方法上。它冻结在那里并且永远不会终止。我发现如果我更改以下文件的权限(对所有人的完全访问权限),扫描仪就会开始工作。

  1. 符号控制对象-OCX c:\WINDOWS\system32\scanner.ocx
  2. 服务对象-DLL c:\WINDOWS\system32\stiopos.dll

问题 2)

现金抽屉现在呈现出类似的行为:它冻结在 Claim() 方法上。我已经更改了我能找到的所有文件的权限(甚至加载了 sysinternal 的 Process Explorer)以查找正在使用的文件。这并没有解决问题。

笔记:

  1. IIS 现在在我的测试中作为 SYSTEM 运行 - 这没有区别。
  2. 硬件在 Epson OPOS 和 Microsoft POS for .NET 测试工具中运行良好。因此,只有在 Web 应用程序的上下文中运行时才会出现问题。
  3. 该应用程序使用 c:\program files\OPOS\CommonCO\OPOSCashDrawer.ocx 和 c:\program files\OPOS\Epson2\SoDrw14.dll

你见过这种行为吗?你对如何解决它有什么建议吗?

挂起时的堆栈跟踪:

Microsoft.PointOfService.dll!Microsoft.PointOfService.Legacy.LegacyProxy.InvokeMethod(string methodName = "ClaimDevice", ref object[] parameters, bool[] byRef) + 0x94 bytes    
Microsoft.PointOfService.dll!Microsoft.PointOfService.Legacy.LegacyProxy.InvokeMethodAndCheckImpl(string methodName = "ClaimDevice", ref object[] parameters, bool[] byRef) + 0x50 bytes    
Microsoft.PointOfService.dll!Microsoft.PointOfService.Legacy.LegacyProxy.Claim(int timeout) + 0x54 bytes    
Microsoft.PointOfService.dll!Microsoft.PointOfService.Legacy.LegacyCashDrawer.Claim(int timeout) + 0xd bytes    
4

1 回答 1

1

解决方案:将应用程序池切换到经典模式(而不是集成)。它现在就像一个魅力!

于 2011-08-30T15:29:33.017 回答