Как получить доступ к последовательному порту из двух разных приложений в C # - PullRequest
2 голосов
/ 22 июля 2011

Я использую три службы WCF, одну для мониторинга устройства считывания карт с использованием последовательного порта, который получает данные, когда пользователь проводит карту.Затем данные отправляются в другую службу, которая проверяет данные и вызывает другую службу, чтобы открыть шлюз для пользователя, связанного с этим портом прокрутки.

Поскольку последовательный порт уже открыт и отслеживается первой службой WCF, другая служба можетне получить доступ к порту, чтобы отправить команду, чтобы открыть дверь.Когда я пытаюсь исправить это, создав класс Singleton вокруг объекта порта смахивания, я могу получить тот же объект, но состояние не поддерживается, так как порт говорит, что он не открыт, но фактически он открывается через первый сервис.

Я просто разместил свой портовый класс.Любая идея или предложение, пожалуйста.

public class Port : SerialPort
{     
    public Port(string port) : base(port)
    {
    }

    public static Port Instance
    {
        get { return Nested.myPort; }
    }

    class Nested
    {
        static Nested() { }

        internal static Port swipePort;

        public static Port myPort
        {
            get
            {
                if (swipePort == null)
                    swipePort = new Port("COM4");

                if (!swipePort.IsOpen)
                    swipePort.Open();
                return swipePort;
            }
        }
    }
}

1 Ответ

5 голосов
/ 22 июля 2011

Один и тот же порт нельзя открыть дважды.Я хотел бы предложить, чтобы одна служба WCF отвечала за связь через последовательный порт, а другие общались с этой службой.Используйте клиентские сертификаты или другую схему аутентификации, чтобы вызовы службы не могли привести к несанкционированным запросам «Open Door», например.

В приведенном выше примере создается статический экземпляр порта, но статические экземпляры являются только «статическими»в контексте того же AppDomain.В зависимости от модели вашего хостинга две службы WCF могут находиться в разных доменах приложений.Кроме того, чтение и запись в последовательные порты не являются потокобезопасными, поэтому вы столкнетесь с проблемами при использовании SerialPort таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...