Настройка асинхронного обратного вызова WCF для опрашиваемого устройства - PullRequest
2 голосов
/ 08 марта 2010

У меня есть настройка службы WCF для управления считывателем отпечатков пальцев USB из наших приложений .Net. Это отлично работает, и я могу попросить его зарегистрировать пользователей и т. Д.

Считыватель разрешает идентификацию (он сообщает вам, что конкретный пользователь представил свой палец, а не просит его проверить, присутствует ли палец конкретного пользователя), но устройство должно постоянно опрашиваться в режиме идентификации на предмет его статуса - при обнаружении пользователя статус меняется.

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

Какой лучший способ добиться этого? Мой сервисный контракт в настоящее время определяется следующим образом:

[ServiceContract (CallbackContract=typeof(IBiometricCallback))]
public interface IBiometricWcfService
{
    ...
    [OperationContract (IsOneWay = true)]
    void BeginIdentification();
    ...
}

public interface IBiometricCallback
{
    ...
    [OperationContract(IsOneWay = true)]
    void IdentificationFinished(int aUserId, string aMessage, bool aSuccess);
    ...
}

В моем методе BeginIdentification() можно ли легко создать рабочий поток для опроса устройства или проще сделать службу WCF асинхронной?

1 Ответ

1 голос
/ 16 марта 2010

Я думаю, что гораздо лучше сделать операцию службы WCF асинхронной. Эта статья MSDN показывает, как это сделать: http://msdn.microsoft.com/en-us/library/ms730059.aspx.

...