Как связаться между службой Windows и формой Windows с помощью WCF? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть Время ожидания , после этого времени у меня есть отправка сообщения между службой Windows и формой Windows с помощью WCF.

Я уже могу отправить сообщение из формы Windows в Windowsсервис:

WCF

public class Interact : IInteract
    {
        private Func<string, int> callback;

        public Interact(Func<string, int> callback)
        {
            this.callback = callback;
        }

        public void SendRequest(string name)
        {
            var output = this.callback(name + " callback");
        }

        public string AskIfAlive()
        {
            return "ask";
        }

    }

Сервисные окна

public partial class LMService : ServiceBase
{
    private ServiceHost host;

    public LMService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        Class1.Init();

        Interact instance = new Interact(ReceiveMsg);
        host = new ServiceHost(instance);
        host.Open();

    }

    private int ReceiveMsg(string data)
    {
        // Message from Windows form to windows service
        Log.writeEventLog(data);
        return 1;
    }
}

Таймер

public static class Class1
{
    static int Timeout = 0;
    static Timer tm = new Timer();

    public static void Init()
    {
        tm.Interval = 1000;
        tm.Elapsed += Tm_Elapsed;
        tm.Start();
    }

    private static void Tm_Elapsed(object sender, ElapsedEventArgs e)
    {
        Timeout++;
        if(Timeout >= 10)
        {
            // SEND MESSAGE TO WINDOWS FORM
            tm.Stop();
        }
    }

}

Я хочу отправить что-то в форму Windows после истечения времени ожидания в службе Windows, но я не знаю, как это сделать, кто-то может мне помочь?

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Независимо от того, является ли услуга, которую мы разработали, дуплексом или моделью запроса / ответа. Инициатор службы находится на стороне клиента, поэтому мы должны разместить службу в приложении формы Windows вместо службы Windows NT.
Кроме того, ваша служба Windows NT, похоже, отправляет сообщение приложению формы Windows один раз. Поэтому я не думаю, что необходимо использовать дуплексную службу.
О дуплексной службе я когда-либо приводил пример. Жаль, что это полезно для вас.
Исключение TimeOut в WCF при реализации дуплекса
Не стесняйтесь сообщить мне, если есть что-то, с чем я могу помочь.

0 голосов
/ 23 октября 2019

Вы можете использовать Duplex Service , чтобы служба также могла отправлять сообщения в приложение Windows Forms. См. Эту ссылку для получения подробной информации и примера.

Дуплексная служба - это служба WCF, которая получает обратный вызов, который она может использовать для отправки сообщений клиенту. Помимо контракта на обслуживание, вам также необходимо создать контракт обратного вызова, который используется службой.

Обратите внимание, что обратный вызов связан с контекстом операции WCF. Возможно, вам придется изменить статический метод Init вашего образца на метод экземпляра и создать новый экземпляр Class1 для вызова / клиента.

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