Архитектура удаленного взаимодействия для вызова метода Windows Service - PullRequest
2 голосов
/ 24 ноября 2010

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

Как мне наслоить свои классы, чтобы моя реализация удаленного канала могла вызывать методы в моем классе обслуживания?

Интерфейс канала:

public interface IMyService
{
    string Ping();
    string SomeMethod(string input);
}

Реализация канала:

public class MyServiceChannel : MarshalByRefObject, IMyService
{
    public string Ping()
    {
        return "Pong";
    }

    public string SomeMethod(string input)
    {
        MethodForChannelToCall(input); // in Service class. How to reference?
        return "Some Output";
    }
}

Класс обслуживания

class MyService : ServiceBase
{
    public void MethodForChannelToCall(string input)
    {
        // do service stuff for remoting call
    }

    public MyService()
    {
        // Set up remoting channel
        try
        {
            TcpChannel tcpChannel = new TcpChannel(12345);
            ChannelServices.RegisterChannel(tcpChannel, false);

            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(MyServiceChannel),
                "MyServiceChannel",
                WellKnownObjectMode.SingleCall);

            // Should I pass an instance of my service to my channel somehow here?
        }
        catch (Exception ex)
        {
            this.EventLog.WriteEntry("Remoting error: " + ex.ToString());
        }
    }
}

Как мне структурировать свои классы так, чтобы мой канал мог вызывать методы моего сервиса?

1 Ответ

0 голосов
/ 03 апреля 2011

В этом случае вы должны использовать WCF. WCF заменяет .net remoting.

Если ваш клиент и служба находятся на одном компьютере, вы можете использовать привязку именованных каналов.

Если они находятся на разных машинах, вы можете использовать net tcpip binding.

...