Каков наилучший из возможных способов совместного использования одного экземпляра службы WCF (класс SoapClient
) между несколькими экземплярами приложения (WPF)?
Мне нужно сделать это, потому что мне нужно включить двустороннюю связь с обратными вызовами, поэтому мне нужно «зарегистрировать приложение» в службе, чтобы другие пользователи, использующие приложение, получали уведомление при каждом входе нового пользователя.
Кстати, ниже вычеркнуто, потому что я подтвердил, что для работы уведомлений владельцы регистраций должны зарегистрироваться в том же экземпляре службы wcf ... таким образом, теперь мне нужен способ поделиться этим экземпляром
В настоящее время я занимаюсь разработкой приложения, и мне нужно каким-то образом информировать пользователей, которые в данный момент используют приложение, всякий раз, когда кто-то входит в приложение.
Я пытался использовать дуплекс WCF, но я не могу заставить его работать ... и я думаю, что причина этого в том, что уведомления и подписки должны происходить на один и тот же экземпляр службы WCF.
Но так как это приложение будет развернуто на компьютерах нескольких пользователей, я не могу поделиться одним экземпляром этой службы wcf, а? (или я могу?)
Есть ли способ поделиться общим экземпляром службы wcf (SoapClient
) для всех пользователей? Или я поступаю неправильно?
В настоящее время я обращаюсь к службе WCF через библиотеку классов через открытое свойство, которое отправляет новый isntance службы wcf каждый раз, когда к ней обращаются, и я думаю, что это причина того, почему уведомления не работают на несколько экземпляров приложения.
Ниже перечислены методы (в библиотеке классов), которые клиентское приложение (приложение wpf) использует для получения доступа к методам службы:
public static MusicRepo_DBAccess_ServiceClient GetService(object instanceContext)
{
return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), dualBinding, endpointAddress);
}
public static MusicRepo_DBAccess_ServiceClient GetService()
{
return new MusicRepo_DBAccess_ServiceClient(new InstanceContext(new WSGateway()), dualBinding, endpointAddress);
}
В главном окне приложения я получаю новый экземпляр из вышеупомянутого перегруженного метода, передавая this
в качестве параметра instanceContext и Open
для ожидания уведомлений, но я никогда не получаю уведомление, когда другой пользователь регистрируется из другого экземпляра приложения.
Вот как я уведомляю регистраторов (отрывок) в методе входа в службу:
if (!_callbackList.Contains(newUser))
{
_callbackList.Add(newUser);
}
_callbackList.ForEach(c => c.NotifyNewUserOnline(loggedInUser));