手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

深入研究VB.Net远程调用对象的机制

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  第一节 引言

  在.NET出现以前,COM和DCOM可以让你很容易地用运行在另一进程或者网络上另一台机器上的对象来进行交互作用。然而现在,.NET结构提供一种与之不同的机制--远程调用,用于在你的客户应用程序和远程对象之间的内部处理和LAN通讯。在本文中,我将介绍如何通过在Visual Basic.NET(VB.NET)中创建一个类库来使用远程对象,调用来自于另一进程或者网络上另一台机器的方法的客户端应用程序。如图



  你仍然可以在VB.NET中使用COM和DCOM,VB.NET支持一个交互机理,你可以用来在COM组件中调用来自.NET的代码。然而,这个机制是为了能够继承以前的系统支持而设计的而不是为了新技术开发的,所以你应该着眼于更多现在新的技术。

  另外一个替代的机制就是使用Web服务调用远程对象,当你使用 Web服务时,你不能进行一个对象的相同的实例的一个以上的方法调用,一个新对象实例服务每次只能调用一个。使用Web服务还要求你在对象运行的机器上安装Internet Information Server ( IIS ),但是你需要的可能是一种不需要安装IIS的轻量级解决方案。

  远程调用是最类似于DCOM的.NET中的技术。在Beta 1版中,.NET远程调用比 DCOM需要更多的准备工作,但是它是一种简单的后台技术,并且承诺当.NET正式版本发布的时候会更加容易。你可以在相同的机器上的一个单独的进程中使用远程调用激活对象,或通过网络激活运行在另外一台机器上的对象。使用远程调用,你可以进行对象的相同的实例上的更多的方法调用,或者你可以配置远程调用象 Web服务那样动作,并且为每一个方法调用创建新的对象实例。

  为了使用远程调用工作,你需要安装.NET Framework SDK,并最好安装集成Visual Studio.NET(VS.NET)。让我们在单独的一台机器上开始测试,在一个来自客户端应用程序中的单独的进程中运行物体的远程调用过程,然后把这个对象的远程调用过程移到网络上的另外一台机器上。

  第二节 了解简单的远程调用

  虽然你可以使用远程调用来填补曾由DCOM来满足的市场,但是远程调用与DCOM不同,远程调用使用一个你选择的网络接口,而DCOM不同,它使用许多难以预测的网络接口来与你的对象通讯,这使得远程调用在大多数的环境中可以很容易的配置。

  当你调用一个使用远程调用的对象时,你通过一个通道进行调用过程:这个远程调用通讯机制与在网络上的对象通讯。你可以选择两个不同的通道甚至还可以创建你自己的通道。.NET中提供的两个通道是HTTP通道和一个直接的 TCP socket通道,你使用这些通道中的一个(即使你可能在同一台机器上)激活一个对象。

  如果你使用 HTTP通道,你就得使用HTTP协议和简单对象访问协议(SOAP)与远程调用对象通讯,即使你使用 HTTP,你也未必非得使用端口80,虽然这是Web服务器默认的端口,你可以指定任意端口号作为通信端口。

  直接的 TCP socket通道也是类似的,如果你选择这个通道,所有的通信就使用一个专有协议和一个SOAP的二进制实现来完成。虽然说这有些不好的地方,但是它多多少少能够快一些,因为把数据编码成二进制格式的过程比使用SOAP效率更加高,因为它是基于XML的。

  每次你的代码调用远程调用对象的一个方法,远程调用子系统把这个方法调用转换成一条并把它通过选定的通道发送到远程调用对象中去。远程调用子系统然后再把这个方法的返回结果转换成一条消息返回到客户端应用程序中。在 beta 1中,使用一个单独的" black box "远程调用组件处理这个过程,但是在以后将发布的.NET中,这个体系结构将更加开放,将提供更多的可延伸性和可控制性。

  和 DCOM一样,远程调用对象必须在一个过程中运行。因为 Microsoft Transaction Server ( MTS )和 COM 都不是特意支持 .NET,所以你需要在服务器上实现你自己的主机应用程序来。 你的主机应用程序使用远程调用服务来在消息通道上监听。 其实这比听起来要容易,因为远程调用为你考虑到所有的细节。 然而,远程调用调试起来可能会比较困难。 稍后我将讨论一些可以使调试变得更容易的技术。

  第三节 创建并使用一个类

  在你能够通过网络调用一个对象之前,你必须有一个类库。所有的COM对象在你首次创建它们的过程中或者在机器中继续运行,在 VB.NET中,你可以使用<Serializable()>属性标记一个类,这样你的对象就是以字的方式发送,意思是说它是物理上被复制进入正在调用的应用程序过程中的。

  显然,如果你想要激活一个在另外一个过程或另外一台机器中的对象的方法,你想要那个对象支持远程调用。要想这样的话,你可以从.NET系统类库中的MarshalByRefClass类或MarshalByRefComponent类中取得你的对象,与使用值传递的标准System.Object基本类不同,你是通过引用传递这些基本类。你也应该避免使用<Serializable>属性标记这个对象,因为你有可能并不希望这个对象连续,而是在服务器中运行它。

  你可以创建一个简单的类库来检测外部远程调用,在 VS.NET集成环境中,创建一个新类库项目,取名为NETserver并把默认的 Class1.vb文件重命名为NETclass.vb。默认的情况下,这个类是从Component基本类中派生出来的,它是通过值传递的。你可以把 Inherits行改为通过引用传递你的类,把你的类改为MarshalByRefComponent的子类:

Public Class NETclass
Inherits System.ComponentModel.MarshalByRefComponent

  你可以添加方法到包含远程运行的代码的类上。例如,你可以编写一个方法从Pubs数据库中以一个作者ID来检索作者姓名,使用Imports语句添加一个引用到 System.Data.dll中。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS