Зависать на Open () / Claim () в OPOS / POS для .NET - PullRequest
3 голосов
/ 30 августа 2011

Я использую Microsoft POS для .NET.У меня есть кассовый аппарат, сканер штрих-кода и чековый принтер, подключенный к компьютеру.Используя тестовое приложение Microsoft POS для .NET, все они работают нормально.

Наше приложение представляет собой веб-приложение ASP.NET в IIS.Таким образом, мы создаем экземпляры устройств 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)

Кассовый ящик теперь работает аналогично: он зависает наЗаявить () метод.Я изменил разрешения для всех файлов, которые смог найти (даже загружая sysinternal Process Explorer), чтобы определить, какие файлы использовались.Это не решило проблему.

Примечания:

  1. IIS теперь работает как SYSTEM в моих тестах - это не имеет значения.
  2. Оборудование работает нормально в Epson OPOS и Microsoft POS дляИнструмент тестирования .NET.Поэтому проблема заключается только в том, что выполняется в контексте веб-приложения.
  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    

1 Ответ

1 голос
/ 30 августа 2011

Решение: переключите пул приложений в классический режим (вместо встроенного).Теперь это работает как шарм!

...