微软的远程处理框架.NET Remoting - 2

2016-01-29 13:49 4 1 收藏

微软的远程处理框架.NET Remoting - 2,微软的远程处理框架.NET Remoting - 2

【 tulaoshi.com - ASP.NET 】

以下我们将举一个使用channel的例子。在这个例子中,我们将可以看到使用HTTP channel把两个应用

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

连接在一起是如此的简单。以下的服务器应用提供了一个服务,可将一个字符串的字母顺序反转。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  Server.cs using System;

  using System.IO;

  using System.Runtime.Remoting;

  using System.Runtime.Remoting.Channels.HTTP;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  namespace RemotingSample

  {

   public class Reverser : MarshalByRefObject

   {

    public string Reverse(string text)

    {

     Console.WriteLine("Reverse({0})", text);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     string rev = "";

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     for (int i=text.Length-1; i=0; i--)

     {

      rev += text[i];

      }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     Console.WriteLine("returning : {0}", rev);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     return rev;

    }

   }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

   public class TheApp

   {

    public static void Main()

    {

     file:// Create a new HTTP channel that

     // listens on port 8000

     HTTPChannel channel = new HTTPChannel(8000);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     // Register the channel with the runtime

     ChannelServices.RegisterChannel(channel);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     // Expose the Reverser object from this server

     RemotingServices.RegisterWellKnownType(

         "server", // assembly name

         "RemotingSample.Reverser", // full type name

         "Reverser.soap", file:// URI

         WellKnownObjectMode.Singleton // instancing mode

      );

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

     // keep the server running until

     // the user presses enter

     Console.WriteLine("Server.exe");

     Console.WriteLine("Press enter to stop server...");

     Console.ReadLine();

    }

   }

  }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  现在我们已经拥有了一个字符反向服务,以下我们将建立一个客户应用来使用这个服务:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

   Client.cs using System;

   using System.Runtime.Remoting;

   using System.Runtime.Remoting.Channels.HTTP;

   using RemotingSample; // reference the server

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

   public class TheApp

    {

     public static void Main()

     {

      // Create and register a channel

      // to comunicate to the server.

      // The client will use port 8001

      // to listen for callbacks

      HTTPChannel channel = new HTTPChannel(8001);

      ChannelServices.RegisterChannel(channel);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

      // create an instance on the remote server

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

      // and call a method remotely

      Reverser rev = (Reverser)Activator.GetObject(

         typeof(Reverser), // type to create

         "http://localhost:8000/Reverser.soap" file:// URI

         );

      Console.WriteLine("Client.exe");

      Console.WriteLine(rev.Reverse("Hello, World!"));

     }

    }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

看,通过远程.NET将两个应用连接在一起是多么的简单。当服务端和客户端程序放在两台不同的机器时,我们可以令两个程序都运行在80端口。这样远程的调用就可通过一个防火墙。你也可将HTTPChannel改为一个TCPChannel试一下。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  你要注意到,客户端是通过“Reverser.soap”来标识它想连接的对象的。这个名字与服务器代码中RegisterWellKnownType的URI参数符合。“.soap”的扩展是不必要的。URI可以是任何的字符串,只要它能唯一标识服务器的对象就可以了。“.soap”的扩展只是用来提醒我们HTTP channel是使用soap来格式化信息的。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  在上面有关channel的例子中,你可能会产生这样的疑问:参数是如何跨网络传送,返回值又是如何送回的呢?答案是,在参数被跨网络传送之前,他们必须经过串行化处理。对于需要传送的所有对象或者结构,都要经过这样的处理。串行化的处理很简单,只是以连续字节的方式建立变量或者对象中的数据的一个持续拷贝。将这

来源:http://www.tulaoshi.com/n/20160129/1491653.html

延伸阅读
标签: Web开发
应用程序开发技术正发生着一次质的飞跃,从根本上大幅度提高开发人员的生产效率,它开启了一道通向全新概念的应用程序的大门。 在过去,开发人员一直通过集成本地系统服务来构建应用程序。在这种模式下,开发人员可以访问丰富的开发资源并能严格控制应用程序的行为。 如今,开发人员在很大程度上已挣脱了这种模式的束缚,致力于构建具...
开始以为我的Remoting配置基本可以了,可最近又出现了一些问题,自己进行简单的摸索和实践,记录如下。 8 、发现自己的数据库连接类ConnectionInfo在web service中作为参数出现无法序列化的错误,由于有public的属性是CultureInfo 的,无法实现序列化(由于CultureInfo 没有实现ISerializable接口),只好把类型改为string;既然remoting调用...
导 读:面对微软推出的.Net FRAMEWORK,你可能会有以下疑问: 准确地讲.Net平台是什么? 如何将.Net的体系结构和J2EE对比? 从.Net的体系结构演绎出的一整套关于企业软件开发方案中我们能学到此什么? 在本文中作者将为你解开这些疑问。 廖永康 原文出处:http://java.sun.com/features/2000/11/dotnetvsms.html 即使你没...
?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   企业应用程序在构建时经常对异常处理关注甚少,这会造成对低级异常(如 java.rmi.RemoteException 和 javax.naming.NamingException)的过度依靠。在 EJB 最佳实践的这篇专栏文章中,Brett McLaughlin 解释了为什么对异常处理投入一点关注就会给我们...
名称空间与程序集名称之间有什么区别? 名称空间是类型的一种逻辑命名方案,其中简单类型名称(如 MyType)前面带有用点分隔的层次结构名称。这样的命名方案完全在开发人员的控制之下。例如,键入 MyCompany.FileAccess.A 和 MyCompany.FileAccess.B 在逻辑上将会具有与文件访问相关的功能。.NET 框架使用一种层次结构命名方案,用于将类型按相...

经验教程

458

收藏

87
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部