2009-09-10 2 views
0

Это мое приложение Hello World Remoting.. NET Remoting HelloWorld

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 

Как я могу это исправить?

ответ

2

Либо изменить сервер так:

TcpChannel tcpChannel = new TcpChannel(8080); 

или изменить клиента, как это:

Activator.GetObject(typeof(MyInterface), "tcp://localhost:9999/FirstRemote"); 

На стороне сервера вы открываете канал по указанному номеру порта (в вашем примере используется порт 9999). По сути, это говорит серверу «слушать» входящие запросы на порт 9999. На стороне клиента вы сообщаете, какой номер порта подключается (в вашем примере вы используете порт 8080). Таким образом, у вас есть ситуация, когда ваш сервер прослушивает порт 9999, но ваш клиент пытается подключиться к порту 8080. Эти номера портов должны совпадать.

3

TcpChannel сервер 9999 клиентские запросы по отношению к 8080

3

Ваш сервер открытия канала на порт 9999, а клиент ищет 8080.