Управление и хранение каждой информации о подключающемся пользователе в службе WCF - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть приложение winform и служба wcf.Мое намерение состоит в том, чтобы, когда мое приложение winform отправляло сообщение с запросом в службу wcf, служба должна сохранять детали запроса клиента, и через некоторое время wcf вернет вызов обратно в приложение winform [client].

Предположим, что будет 10 таких клиентов, которые отправят запрос в эту службу wcf, и через 5 минут служба отправит сообщение обратного вызова каждому клиенту, отправив сообщение "hi".

Моя реализация службы выглядит следующим образом.

  [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = 
       typeof(IServiceCallBacks))]
public interface IService
   {
          [OperationContract]
          void Connect(User user);
   }

И мой метод обратного вызова показан ниже

  public interface IServiceCallBacks
    {

    [OperationContract(IsOneWay = true)]
    void ContactsUpdated(List<Contact> updatedContacts);
    } 

А вот реализация

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service : IService
{
    List<User> users = new List<User>();

    public Service()
    {

    }

    public void Connect(User user)
    {
        users.Add(user);
    }

это правильный путь?Как я могу отправить уведомление каждому клиенту из сервиса?

1 Ответ

0 голосов
/ 15 апреля 2019

Проблема с контрактами обратного вызова заключается в том, что соединение должно быть открыто.Обратный вызов «5 минут» может завершиться ошибкой, поскольку в зависимости от типа транспорта соединение может быть закрыто до этого из-за неактивности .

Если у вас возникнут проблемы, вы можете подумать о том, чтобы вообще не использовать "обратные вызовы" WCF, а просто обработать "client" как другую службу и сделать так, чтобы "server" открывалподключиться к «клиенту» и вызвать его.Это могло бы обойти любую такую ​​проблему бездействия.Единственная проблема заключается в брандмауэрах, поэтому вам может потребоваться выбор транспорта WCF и портов брандмауэра.

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