Вопрос
Это мое приложение Hello World Remoting.
using System;
using System.Collections.Generic;
using System.Text;
namespace Remoting__HelloWorld.UI.Client
{
public interface MyInterface
{
int FunctionOne(string str);
}
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Remoting__HelloWorld.UI.Client
{
class MyClient
{
public static void Main()
{
TcpChannel tcpChannel = new TcpChannel();
ChannelServices.RegisterChannel(tcpChannel);
MyInterface remoteObj = (MyInterface)
Activator.GetObject(typeof(MyInterface), "tcp://localhost:8080/FirstRemote");
Console.WriteLine(remoteObj.FunctionOne("Hello World!"));
}
}
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using Remoting__HelloWorld.UI.Client;
namespace Remoting__HelloWorld.UI.Server
{
public class MyRemoteClass : MarshalByRefObject, MyInterface
{
public int FunctionOne(string str)
{
return str.Length;
}
}
}
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Remoting__HelloWorld.UI.Server
{
class Program
{
static void Main(string[] args)
{
TcpChannel tcpChannel = new TcpChannel(9999);
ChannelServices.RegisterChannel(tcpChannel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(MyRemoteClass), "FirstRemote", WellKnownObjectMode.SingleCall);
System.Console.WriteLine("Press ENTER to quit");
System.Console.ReadLine();
}
}
}
Но после запуска этого приложения я получаю следующее исключение:
No connection could be made because the target machine
actively refused it 127.0.0.1:8080
Как я могу это исправить?
Решение
Либо измените сервер так:
TcpChannel tcpChannel = new TcpChannel(8080);
или измените клиента следующим образом:
Activator.GetObject(typeof(MyInterface), "tcp://localhost:9999/FirstRemote");
На стороне сервера вы открываете канал с указанным номером порта (в вашем примере вы используете порт 9999). По сути, это говорит серверу «прослушивать» входящие запросы на порт 9999. На стороне клиента вы сообщаете ему, к какому номеру порта подключаться (в вашем примере вы используете порт 8080). Таким образом, у вас есть ситуация, когда ваш сервер прослушивает порт 9999, но ваш клиент пытается подключиться к порту 8080. Эти номера портов должны совпадать.
Другие советы
сервер tcpChannel - 9999, клиент запрашивает 8080
Ваш сервер открывает канал на порту 9999, а клиент ищет 8080.