Я использую Microsoft POS для .NET.У меня есть кассовый аппарат, сканер штрих-кода и чековый принтер, подключенный к компьютеру.Используя тестовое приложение Microsoft POS для .NET, все они работают нормально.
Наше приложение представляет собой веб-приложение ASP.NET в IIS.Таким образом, мы создаем экземпляры устройств OPOS на стороне сервера веб-приложения, и все работает отлично.Мы занимаемся этим начиная с Windows XP / IIS 5.1.
Мы сейчас обновляем наши компьютеры для развертывания до Windows 7. Наши компьютеры для разработки запускают этот сценарий без проблем.Однако на компьютере развертывания, с которым я сейчас работаю, у меня возникли две проблемы:
Проблема 1)
Сканер штрих-кода зависает в методе Open ().Там замерзает и никогда не кончается.Я обнаружил, что если я изменю права доступа (полный доступ ко всем) для следующих файлов, сканер начнет работать.
- Объект управления символами-OCX c: \ WINDOWS \ system32 \ scanner.ocx
- Служебная DLL-библиотека c: \ WINDOWS \ system32 \ stiopos.dll
Выпуск 2)
Кассовый ящик теперь работает аналогично: он зависает наЗаявить () метод.Я изменил разрешения для всех файлов, которые смог найти (даже загружая sysinternal Process Explorer), чтобы определить, какие файлы использовались.Это не решило проблему.
Примечания:
- IIS теперь работает как SYSTEM в моих тестах - это не имеет значения.
- Оборудование работает нормально в Epson OPOS и Microsoft POS дляИнструмент тестирования .NET.Поэтому проблема заключается только в том, что выполняется в контексте веб-приложения.
- Приложение использует 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