Я добавил удаленные вызовы в свою службу 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());
}
}
}
Как мне структурировать свои классы так, чтобы мой канал мог вызывать методы моего сервиса?