2009-09-10 6 views
0

Ceci est mon application 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(); 
     } 
    } 
} 

Mais après l'exécution de cette application, je reçois l'exception suivante:

No connection could be made because the target machine 
actively refused it 127.0.0.1:8080 

Comment puis-je résoudre ce problème?

Répondre

2

Modifiez le serveur comme ceci:

TcpChannel tcpChannel = new TcpChannel(8080); 

ou changer le client comme ceci:

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

Côté serveur, vous ouvrez un canal sur le numéro de port spécifié (dans votre exemple, vous utilisez le port 9999). Essentiellement, cela indique au serveur «d'écouter» les demandes entrantes sur le port 9999. Du côté client, vous indiquez le numéro de port auquel vous voulez vous connecter (dans votre exemple, vous utilisez le port 8080). Vous avez donc une situation où votre serveur écoute sur le port 9999, mais votre client essaie de se connecter sur le port 8080. Ces numéros de port doivent correspondre.

3

le serveur TCPChannel est 9999 les demandes des clients vers 8080

3

Votre serveur ouvre le canal sur le port 9999 alors que le client est à la recherche de 8080.

Questions connexes