Механизм Push Notification между сервером и клиентским приложением

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

Я прошу некоторых предложений по этой проблеме. Спасибо заранее.

Ответ 1

Вам нужно реализовать проект публикации и подписки. В WCF вы можете использовать протокол net-tcp для подключения в дуплексных клиентах и ​​сервере.

Вы можете загрузить неплохую реализацию на http://www.idesign.net/Downloads/GetDownload/2032

И вы найдете хорошую статью здесь.

Привет

Ответ 2

Толга, вы можете использовать winforms с signalR, серверная сторона может быть asp.net или автономным окном.

Ответ 3

PushSharp: серверная библиотека для отправки Push-уведомлений клиентам (клиенты - это в основном мобильные устройства, но могут быть обычными как Что ж)! Вы также можете получить учебник по использованию PushSharp.

Ответ 4

        var webAddr = "https://fcm.googleapis.com/fcm/send";

        var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Headers.Add("Authorization:key=YOUR_SERVER_KEY");
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"to\": \"/topics/news\",\"notification\": {\"body\": \"New news added in application!\",\"title\":\"" + Your_Notif_Title+ "\",}}";
            streamWriter.Write(json);
            streamWriter.Flush();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = streamReader.ReadToEnd();
        }