URL Moniker概述(转)

本文深入探讨了URL(统一资源定位器)和Moniker的概念,解释了URL的组成部分及其在网络中的作用,同时介绍了Moniker在OLE2规范中的起源及如何在系统中定位和获取数据。此外,文章还讨论了URLMoniker在ActiveX API中的应用,以及实现URLMoniker所需的客户机、系统和传输组件。
URL Moniker概述: 这一节中我们先介绍一下URL和Moniker这两个术语。URL (统一资源定位器)是一种方法,我们对它已经比较熟悉了,我们用它从一个站点走到另一站点。它就是使用浏览器时打入的http://www.mycompany.com,URL 有三个主要部分,它们是协议(上例中是http)、主机(www)和域(mycompany.com),你打入的URL 的其余部分即是你标识的资源位置(如目录)。这种机制只所以非常有用,是因为可以无限制地扩展它。例如,如果你想用另一种协议,只需在URL的开头指明即可。Internet有好几个这样的协议,包括HTTP、FTP、Gopher和News。
注 URL由三个主要部分组成:协议、主机名和域。
注释 本节中讨论的URL,包括了全部的URL,而不仅仅讨论一般情形。例如,一些URL把host(主机)称为home或别的什么名称,如:http:/home.netscape.com。另外,一些域正变得越来越复杂了,从而可以提供更精确的信息,如,http:/www.wisconsin.edu.k6.us是美国威斯康星州小学校的URL。一些浏览器不要求用户打入协议名,他们简单地为资源核对所有合适的协议。总之,除了URL不同于他们提供的一般例子外,在这一节中,不对它作任何的假定。
Moniker起源于OLE 2规范。实际上一个Moniker就是系统生成的一个对象,你可以利用该对象找到另一对象或者从中获取数据。某些定制的Moniker还支持其它操作,但任何Moniker都提供两种基本操作。OLE 2规范推出了同步Moniker,也就是说应用程序必须等待,一直到系统已经从指定对象获取了所查找的数据为止。
Web链接 如果你想在商业性的应用程序中使用URL Moniker,最好先进行一点专业训练。Developer Solutions(开发者解决方案)在http://www.devsolutions.com/ 上开设了一门课程,专门讲述Moniker的问题。三天的课程还讨论了各种其它与OLE相关的主题如DCOM和编组(marshalling)。如果你确实想了解Microsoft提交给ANSI申请批准的OLE 标准的所有信息,可以浏览http://info.gte.com/ftp/doc/activities/x3h7/ by_model/ OLE 2.html。
将URL和Moniker的思想组合起来,就得到了ActiveX API(从Visual C++4.2版至6.0 版的一部分)提供的URL Moniker。那么ActiveX使用的URL Moniker与OLE 2 规范所说的同步有什么不同呢? 一方面,URL Moniker同时提供了同步和异步捆绑,这在Internet上很重要,因为不知道要花多长时间才能找到所需数据。如果对Internet检索使用同步捆绑,应用程序将被挂起并给客户机造成许多问题(更不用说用户必须坐在那里等待,傻看着没有变化的应用程序)。URLMoniker还提供了一种建立并使用URL的框架,这是OLE 2规范没涉及的领域。如果你要用标准的OLE 2 应用程序访问远程数据,那么它必须支持网络上的UNC(统一命名约定)设备定位。这意味着可能有某种映射的设备,但很显然,Internet定位是不可能做到的。
创建URL Moniker需要三部分:客户机、系统和传输。客户机部分已经常驻于应用程序中了,本章“使用URL Moniker”一节将进一步讨论客户机端。系统组件指的是操作系统的一部分(你不必担心这部分,因为Microsoft负责处理它)。传输简单地指出你想怎样将信息从服务器发送给客户机。这部分是可变的,它取决于你要实现什么传输方式。在Internet上一般使用TCP。
注 URL Moniker的三部分是客户机、系统和传输。
就像本书中到目前为止讨论的其它特殊的OLE功能一样,实现URL Moniker要求你创建或使用某些特殊接口。URL Moniker的客户机、系统和传输三个组件中各有两个接口。下面将对每个接口一一说明。
注 和其它每种ActiveX编程技术一样,使用URL Moniker也需要增加特殊接口。
注 请谨记,Windows还提供了实现URL Moniker所需要的两个系统级接口。
IEnumFormatETC(客户机) 它是可选接口,允许你提供影响捆绑操作的特定协议信息。例如,要提供MIME功能,就需要提供该接口,以便列举应用程序所支持的格式。
IBindStatusCallback(客户机) 传输将使用该接口来通知客户机的特定事件(如下载过程进度)。更重要的是,一旦从客户机经由系统到传输的捆绑完成,传输即利用IBindSystemCallback::OnStartbinding方法传回一个IBinding接口。
IBindCtx(系统) 你在开始查找Internet资源时,都必须使用CreatAsyncBindctx这个ActiveX API 调用,给IBindStatusCallback接口(也可经给 IEmumFromatETC接口)传送一个指针。它将返回一个指向IBindCtx接口的指针,负责完成客户机和传输之间的实际捆绑。
IMoniker(系统) 该接口元素有许多用途。它的主要功能包括:使用GetDisplayName 方法,按人们可读的格式,获取moniker名称,以及使用BindToStorage或BindToObject方法传输具体例子。
IParseDisplayName(传输) 由ActiveX支持的 MkParseDisplayNameEx()函数的当前版本允许你根据文件或者URL创建Moniker。不过你可能会发现,需要根据其它类型的对象创建moniker。该接口允许你的应用程序与传输一起创建新的moniker类型。你还应该将这些新moniker类注册到注册表中。
IBinding(传输) 系统创建一个由应用程序想要访问的协议类型所定义的传输。IBinding就是产生的专用协议传输接口。它通过IBindStatusCallback接口,负责分析协议串、 驱动任何下载的数据、以及给应用程序提供状态信息。应用程序能利用IBinding接口启动、终止、暂停或恢复捆绑操作。
端口号与URL的关系
我不打算花费过多的时间去让你们学习那些可以留给工程师们解决的问题。但是,如果能在碰到硬件/软件连接问题时,知道一点关于URL中的“http”是如何工作的信息,那么,会使你工作起来更方便。Internet上使用端口号的概念。也就是说,你在与IP地址200.100.100.1连接时,可以选择这个地址的某个特定端口。
实际上,这个概念是从人们在Internet上使用主机排斥一切的年代遗留下来的。你可以将某个终端插入主机背后的特定端口以获得特定服务。幸运的是,你可以对PC使用同样的概念。如同机器上的串口和并口一样,Internet上的端口也有专用目的。
从软件角度也很好理解。任何在机器上做过汇编级编程的人都知道,必须访问特定端口号才能获取键盘信息。即使你没做过汇编程序,也可能使用特定端口来设置某个卡(如声卡)。任何想使用该声卡的软件(如游戏),都需要知道声卡的端口号才能发出声音。同样如果你想从Internet上获取特定信息,也需要端口号。
在URL中指定特定协议等同于申请特殊端口号。老的通讯程序要求你输入端口号; 谢天谢地,URL已经解决这个问题。例如,当你在URL中输入“http”时,实际上是请求访问主机上端口号80。(其它如TelNet使用端口23,某些交互游戏使用端口4201。总之,每个协议都有一个特定端口号)。记住“http”比记住使用端口80要容易得多。由于Internet上的每个人都使用同样的端口号请求特定的公共服务,所以在URL中可以使用http。
好了,现在来看看你为什么要知道这些信息。网络管理员并不总是使用服务的缺省端口号。你可以为Internet上特定的公司服务加入一个特殊端口号──只要服务器软件允许这样设置就行。尽管使用特殊端口号并不能代替防火墙和其它 安全帮助,它仍不失为在Internet服务器上设定一块不容别人窥视的领地的一种好方法。在做某些配置工作如设置防火墙的过滤器时,知道端口号也会带来方便。最后,尤其对于程序员来说,如果一切看似正常,但却不能正常运行,那么了解Internet连接是如何工作的,将有助于解决应用程序的这种问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-123241/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-123241/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值