PCSCException SCARD_E_NO_SERVICE

Я использую библиотеку sun.security.smartcardio для работы со смарт-картами. Я использовал пример исходного кода на Java, предложенный Людовиком Руссо. Если я закольцовываю этот код, когда я выполняю выбор доступных терминалов для карт (sun.security.smartcardio.PCSCTerminals.list (Неизвестный источник)), у меня возникает следующее исключение:

sun.security.smartcardio.PCSCException: SCARD_E_NO_SERVICE

Если я перезапускаю приложение после каждого использования смарт-карты, все работает нормально. Кто-нибудь знает, почему так происходит?

Спасибо за вашу помощь

Франческо


person FrancescoDS    schedule 03.01.2013    source источник
comment
Укажите образец исходного кода и, если возможно, укажите SSCCE. Вы не должны использовать что-либо в sun пакетах напрямую, вместо этого используйте javax.smartcardio. Обратите внимание, что javax.smartcardio может отсутствовать, поэтому вам, возможно, придется загрузить реализацию, если она недоступна. Документация также отсутствует, когда вы загружаете документы, вместо этого используете онлайн-документы или документы, найденные в JSR.   -  person Maarten Bodewes    schedule 03.01.2013
comment
В исходном коде я использовал пакет javax.smartcardio. Проблема в том, что я не нашел хороших документов по этому поводу, и нет примеров, в которых используется цикл вызовов смарт-карт. Я заметил, что, следуя примеру Людовика Руссо, когда я выполняю Card.disconnect (), у меня возникает та же проблема, что описана в сообщении. Я использую инструмент pcscd в Ubuntu, чтобы разрешить использование устройства чтения смарт-карт с драйвером pcsc.   -  person FrancescoDS    schedule 04.01.2013
comment
теперь ошибка изменена - СООБЩЕНИЕ: сбой отключения () - ПРИЧИНА: sun.security.smartcardio.PCSCException: Неизвестная ошибка 0x5f6e6570 - sun.security.smartcardio.CardImpl.disconnect (Неизвестный источник) Я не нашел ничего об этом коде ошибки!   -  person FrancescoDS    schedule 04.01.2013
comment
Вылезает, если я вызываю Disconnect () без карты в считывателе. Если карта находится в считывателе (и работает pcscd) я вижу ошибку SCARD_E_NO_SERVICE   -  person FrancescoDS    schedule 04.01.2013
comment
Обратите внимание, что в программном обеспечении для чтения смарт-карт в целом много ошибок. Мне нужно было выбрать конкретного ридера для повторного тестирования, и даже тогда мне пришлось программировать вокруг ошибок. Вы пробовали использовать тайм-ауты между командами читателю? Ошибка, которую вы получаете, вероятно, зависит от PCSC или производителя считывателя.   -  person Maarten Bodewes    schedule 04.01.2013
comment
Проблема в том, что отключение всегда вызывало ошибку, и я не знаю почему ... плюс код ошибки неизвестен ... Я даю таймауты между вызовами. Возможно, в моем коде что-то не так ... после короткого списка вызовов: 1. pcscd start; 2. выберите CardTerminal; 3. waitforcardpresent; 4. подключиться; 5. getbasicchannel; 6. apdus на смарт-карту; 7. отключить   -  person FrancescoDS    schedule 04.01.2013
comment
Не вижу проблем. Обратите внимание, что вы не можете закрыть основной канал и можете попытаться получить монопольный доступ к терминалу; но это всего лишь намеки. Не забудьте запросить сброс карт или немного поиграться с ними. Если ничего не помогает, попробуйте другой ридер, рекомендуются omnikey или более дорогие считыватели smartware.   -  person Maarten Bodewes    schedule 05.01.2013
comment
Итак, вы имеете в виду, что могут быть проблемы со считывателем смарт-карт и его драйверами? Это может быть очень большая проблема ... Я не закрываю основной канал, а только пытаюсь закрыть соединение с картой. Попробую выполнить disable () со сбросом карты. Что вы имеете в виду под эксклюзивным доступом? Большое спасибо за вашу помощь   -  person FrancescoDS    schedule 07.01.2013
comment
Должен быть метод Terminal.beginExclusive (), который должен гарантировать, что только приложение тура имеет доступ к читателю.   -  person Maarten Bodewes    schedule 07.01.2013
comment
когда нужно вызывать beginExclusive? после cardTerminal.connect () и перед каждой командой apdu? Обратите внимание, что мое приложение - единственное, которое наверняка обращается к читателю (это единственное приложение, работающее в ОС).   -  person FrancescoDS    schedule 07.01.2013
comment
Это в основном устранение неполадок, это может сработать (например, против служб Windows)   -  person Maarten Bodewes    schedule 07.01.2013
comment
См. docs.oracle.com/javase/6/docs/jre/api/security/smartcardio/spec/, значит, это была карта, а не терминал.   -  person Maarten Bodewes    schedule 07.01.2013
comment
В Windows 8 служба закрывается, когда больше не подключены считыватели. См. Также stackoverflow.com/questions/16921785/   -  person yonran    schedule 13.11.2013
comment
Это должно помочь stackoverflow .com / questions / 16921785 /   -  person devesh-ahuja    schedule 21.06.2017