在OPOS / POS for .NET中挂起Open()/ Claim()

时间:2011-08-30 13:44:02

标签: opos pos-for-.net

我正在运行Microsoft POS for .NET。我有一个现金抽屉,条形码扫描仪和收据打印机连接到计算机。使用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
  3. 问题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
    4. 你见过这种行为吗?你对如何解决它有什么建议吗?

      挂起时的堆栈跟踪:

      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    
      

1 个答案:

答案 0 :(得分:1)

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