2009-09-10 97 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