当前位置:编程学习 > VB >>

深入研究VB.Net远程调用对象机制(2)

 

 

首先,你需要通过点击 Project菜单引用NETserver项目,然后添加引用和项目标签(参见图 2),选择 NETServer并单击 OK,在模块 1的顶部添加一条导入语句:

 

  导入 NETserver

    

        (图001)

 

 

  这样你的类对这个主应用程序就可用了,对于那些能够创建这个对象的实例的远程系统就很关键。

 

  主配置文件描述了你的对象以及如何到达。使用这个文件来设置主应用程序,以便它能够在适当的通道里监听适当的信息。在Solution Explorer中,右击你的主应用程序并从菜单中选择Add New Item(添加新的项目)。命名这个文件为 host.cfg。这个文件是一个简单的文本文件,使用井号(#)作为分隔符,并且它有三行代码能为你的远程对象服务。

 

  第一行指出主应用程序的名称。名称可以是任何东西,但是客户机可以使用它来找到主机:

 

Name#NEThost

 

  接下来的这行定义调用的对象,它描述了这个类的类型名称,这个类所处的集合,应该监听消息的主机的统一资源标识号(URI)以及对象运行的方式:

 

WellKnownObject#NETserver.NETclass#NETserver#NETserver/NETclass.soap#Singleton

 

  你需要在一个行中输入前面所有的代码,在项目之间不留空格。这是 beta 1中隐含的唯一的文件格式;将来,你将能使用 XML来格式化这个文件。

 

  远程调用支持两种方式: Singleton和 SingleCall。

 

  第三行配置当与对象通信时使用的通道。本例中使用的HTTP通道, 8085端口:

 

Channel#System.Runtime.Remoting#System.Runtime._

    Remoting.Channels.HTTP.HTTPChannel#ports=8085

 

 

  在一行中输入所有的代码,项目中间不留空格。

 

  一旦你构建了解决方案,你就可以打开一个控制台窗口并运行主应用程序。以命令行形式进入 NEThostu30446目录并执行 NEThost.exe。应用程序指出这个网络类已经被初始化了。它现在监听来自客户机的请求。

 

  你还可以以编程方式配置主机,而不使用配置文件。配置文件很好用,因为你可以使用它来改变主应用程序使用的通道或端口而不必重编译和重新部署。然而,如果你喜欢的话,你也可以跳过配置文件而直接地从代码中配置远程服务。它的功能上与使用配置文件相当;你可以选择任一种方法。

 

  修改Sub Main方法来配置主机:

 

Sub Main()

 Dim c As New Channels.HTTP.HTTPChannel(8085)

 ChannelServices.RegisterChannel(c)

 RemotingServices.RegisterWellKnownType("NETserver",

   "NETserver.NETclass","NETclass", WellKnownObjectMode.Singleton)

 Console.WriteLine("Press to exit")

 Console.Read()

End Sub

 

 

  首先,你要创建一个 HTTPChannel对象,初始化它来使用 8085端口,然后使用 ChannelServices注册这个通道。接下来,你可以注册远程对象,只要提供集合名称、完整的类名、客户机使用的 URI以及对象的存取方式。

 

  当你使用 DCOM调用一个远程对象时,你的客户机代码与你的项目中直接调用的对象的代码不同。VB.NET并不保留这个特性,你的 VB.NET客户应用程序需要包含配置远程系统的代码以使远程对象可用的。不管对象是本地的还是远程的,调用这个对象上方法的实际代码都是相同的,但是你需要添加几行额外代码来配置这个远程系统。

 

  在 VS.NET中创建一个新Windows应用程序项目并把它命名为 NETclient,添加一个NETserver集合的引用,并添加一个 Imports语句:

 

Imports NETserver

 

  这个语句使你的客户应用程序可使用远程类,你现在可以添加一个按钮到窗体中,并写按钮的代码来调用对象:

 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

 Dim obj As New NETclass()

 MsgBox(obj.GetName("238-95-7766"))

补充:软件开发 , Vb ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,