第五节 配置客户端
就象主应用程序一样,你可以选择以编程方式配置客户应用程序而不是使用一个配置文件。然而,在beta 1中,在客户端上的改动并不像在服务器端上的改动那么容易,因为你还需要改变创建每一个对象实例的方法的代码。为了不使用New关键字来创建对象,你还需要使用Activator.GetObject方法。这利用了一个附带在客户机上的配置文件。
改变配置客户机的方法,只要把调用替换为ConfigureRemoting,如下所示:
Dim c As New Channels.HTTP.HTTPChannel() ChannelServices.RegisterChannel(c)
|
这两行代码配置 HTTP通道,以便为使用它做好准备。然后你必须搜寻客户应用程序,找到使用 New关键字创建远程对象的代码:
使用这个语句替换前面的那一行语句:
obj = CType(Activator.GetObject (GetType(NETserver.NETclass), _ "http://localhost:8085/NETclass"), NETclass) |
这行语句很复杂,它调用GetObject方法从指定URI取得一个 NETserver.NETclass类型的对象。然后使用CType函数把得到的结果对象强制转换成 NETclass类型以便你可以在你的代码中使用它。
你的客户机代码剩余部分就可以保持不变了,如果你决定使用编程配置你的客户应用程序,我推荐在一个函数中封装对象的创建过程,如下:
Private Function NewNETclass() As NETclass Return CType(Activator.GetObject( GetType(NETserver.NETclass),_ "http://ineroth:8085/NETclass") , NETclass) End Function
|
然后,当你想得到这个对象的一个引用的话,你可以使用这个函数:
虽然这还不象使用 New关键字那么简单,它还是封装代码来创建远程对象。
远程程序很难调试,这是因为你的客户应用程序有到你的远程程序直接的引用,当远程程序失败时而你的客户机看上去仍然在工作。这是因为如果远程调用过程失败的话,客户机就会试图调用对象的局部拷贝。
你可以证明在这个函数返回它的值之前,通过在NETclass中添加一行代码调用远程对象来打印一则信息到控制台窗口:
Console.WriteLine("Returning " & CStr(dr.Item("au_lname"))_ & ", " & CStr(dr.Item("au_fname"))) |
现在,在你的主应用程序运行的服务器控制台窗口中,当它被调用时这个功能显示一则信息。当你运行客户应用程序时转换到控制台窗口并保证它显示这则信息。事实上,这证明你正在与远程对象交互。
如果你在连接远程对象时遇到了麻烦,你可以通过使用浏览程序来测试这个主应用程序。在一个控制台窗口中运行这个主应用程序,然后打开 Internet Explorer并且定位到这个远程对象的 URI。在我的例子中,你将定位到这个 URI:
http://localhost:8085/NETclass |
如果主机正确操作,你应该看作为显示为一个页面或 XML的远程对象的SOAP定义(参见图3)。如果你没有看,主机可能就没能正确配置。
你可以使用远程调用来创建 N层应用程序,只要通过调用 Active Server Pages ( ASP.NET )或者来自 VB.NET客户端应用程序中的 remote组件。 你也可以通过把 NEThost放进 Windows 2000 Service Application中,来增强这个例子的功能。因为那样的话,服务器在这台机器运行的任何时候都可用。你还可以使用它从一个数据库中返回数据,或者执行其他需要的服务器端处理过程。 你还可以使用 ASP.NET页面或者 VB.NET Windows应用程序来替换本文中的简单的例子,这样你就可以向你的用户显示你丰富的才华了。
查看本文来源