Вопрос

Это мое приложение 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top