从.NET的WEB服务中调用一个COM对象

ZDNet软件频道 时间:2004-02-26 作者:Builder.com |  我要评论()
本文关键词:
在.NET中创建一个Web服务是一件简单的事情。同样的,在.NET中设置调用一个COM对象也是非常容易的。但是,当COM对象在使用单线程模型的时候,将这两者联合起来将是一件困难的事情。
本文译自Builder.com,未经许可请勿转载

在.NET中创建一个Web服务是一件简单的事情。同样的,在.NET中设置调用一个COM对象也是非常容易的。但是,当COM对象在使用单线程模型的时候,将这两者联合起来将是一件困难的事情。你知道,Web服务从来就是由多线程模型创建的。虽然是这样,使Web服务能够调用一个单线程模型中的COM对象也不是没有可能,让我来教你如何实现。

 

什么是线程模型?

Windows,像如今大多的操作系统一样,允许你在同一时间运行多个程序。每个程序原本就是一个进程(或者在少数情况下,是几个进程的集合)。一个进程是包含了数据和代码的内存地址空间的集合,在这个内存空间中还包括了这个进程在处理过程中所需要的其它系统对象。在Windows的每一个进程中都可以有多个线程在执行。一个线程的执行,或者不止一个线程的执行,都是在代码中执行一条路径。当进程开始执行的时候,一个线程就开始执行了,就像程序中的main函数一样。随着线程的执行,主线程会逐渐产生需要的其它线程。但是,大多的程序都只是线程的一次执行,换一种说法,就是主线程在执行中不产生新的线程。

还有一种情况会导致线程的产生。就是在有多个请求同时申请同一种类型的对象的时候。例如,当在Web服务器正在执行的时候又出现了一个请求申请这个服务器,这时,就会产生一个新的线程来服务这个请求。使用Web服务时,只要有对Web服务的请求,就会自动产生一个线程。因为是这样,Web服务产生时就是多线程的。

在COM中,让一个COM对象处理多线程是非常重要的,这样你就应该了解外部的事物是如何和该COM对象进行交互的。程序员通过用Visual Basic and Delphi创建的大多COM对象都是单线程的。换句话说,就是在它们内部并不了解在进程中如何执行多线程。

但是可选择的COM对象却有单线程或者多线程。单线程的COM对象在同一时间内只执行一个线程。多线程对象将允许在同一时间内运行多个线程。你可能听说过自由线程,它是多线程对象的一个别名。没有严格的限制要求你必须对每个对象使用同样的线程模型。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134