欢迎光临
我们一直在努力

.Net Remoting 实例-.NET教程,远程及网络应用

建站超值云服务器,限时71元/月

 先简要地讨论远程对象和一个简单的客户机/服务器应用程序,该程序使用了远程对象。执行的远程对象是hello。 helloservers是服务器上应用程序的主类,helloclient是客户上应用程序的主类,如下图所示:

第一步:创建远程的共享库 

为了说明.net remoting 是如何运行的,先创建一个简单的类库,以创建远程的对象。

依次点击“文件”->“新创建”->“工程”,选择创建一个c# library,并将其命名为remotehello,然后点击ok按钮。这将创建一个.net remote客户端和服务器端用来通讯的“共享命令集”。 

 

程序集的名称是remotehello.dll,类的名称是hello, 类hello是从

system.marshallbyrefobject 派生出来的。

 

程序集的完整代码 hello.cs为:

using system;

namespace  wrox.procsharp.remoting

{

    /// <summary>

    /// class1 的摘要说明。

    /// </summary>

    public class hello : system.marshalbyrefobject

    {

        public hello()

        {

            //

            // todo: 在此处添加构造函数逻辑

            //

            console.writeline(“constructor called”);

        }

        ~hello()

        {

            console.writeline(“destructor called”);

        }

        public string greeting(string name)

        {

            console.writeline(“greeting called”);

            return “hello,” + name;

        }

    }

}

编译创建的工程,就会得到一个dll文件,并可以在其他的工程中使用它。

  第二步:创建简单的服务器

  创建一个c#控制台应用程序helloserver 。 为了使用tcpserverchannel类,必须引用

system.runtime.remoting程序集,另外更重要的是,引用上面创建的remotehello程序集。

  在main()方法中,用端口号8086创建一个 system.runtime.channels.tcp信道,该信道

使用system.runtiem.remoting.channels.channelservices注册,使之用于远程对象。

  

在远程对象注册之后,使服务器一直处于运行状态,直到按任意键为止:

helloserver.cs的完整代码为:

 

using system;

using system.runtime.remoting;

using system.runtime.remoting.channels;

using system.runtime.remoting.channels.tcp;

 

namespace  wrox.procharp.remoting

{

    public  class helloserver

    {

        [stathread]

        public static void main(string[] args)

        {

            tcpserverchannel channel = new tcpserverchannel(8086);

            channelservices.registerchanel(channel);

            remotingconfiguration.registerwellknownservicetype( typeof(hello),”hi”,

                wellknownobjectmode.singlecall);

            system.console.writeline(“hit to exit”);

            system.console.readline();

        }

    }

}

 

名字空间是对象所需要的。请记住,如果得到system.runtime.remoting.channels.tcp名字空间不存在的信息,请检查是否象上面的代码那样添加了对system.runtime.remoting.dll的引用。

 

第三步: 创建简单的客户机

客户机也是一个c#控制台应用程序 helloclient. 这里也引用了system.runtime.remoting

程序集,以便使用tcpclientchannel类。 此外,也必须引用remotehello程序集。

  在客户机程序中,要创建一个tcpclientchannel对象,这个对象注册在channelservices 中。

对于tcpchannel,使用默认的构造函数,因此可以选择任意一个端口。接下来使用activator类把代理对象返回给远程对象。

  helloclient.cs 的完整代码为:

 

using system;

using system.runtime.remoting.channels;

using system.runtime.remoting.channels.tcp;

 

namespace wrox.procsharp.remoting

{

    /// <summary>

    /// helloclient 的摘要说明。

    /// </summary>

    public class helloclient

    {

        [stathread]

        public static void main(string[] args)

        {

            channelservices.registerchannel(new tcpclientchannel());

            hello obj = (hello)activator.getobject(typeof(hello),”tcp://localhost:8086/hi”);

            if (obj == null)

            {

                console.writeline(“could not locate server”);

                return;

            }

               

            for(int i=0;i<5; i++)

            {

                console.writeline(obj.greeting(“christian”));

            }

        }

    }

}

 

当打开服务器和客户机程序hello时,christian在客户控制中会出现5次。在服务器应用程序的控制台窗口中,会看到类似的下图的窗口输出结果

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » .Net Remoting 实例-.NET教程,远程及网络应用
分享到: 更多 (0)