让一个Web服务调用一个单线程套间模式的COM对象是不可能的――让我们来看更多的资料,了解一下它是怎样成为可能并被完成的。
在.NET中创建一个Web服务是很容易的,在.NET中设置调用一个COM对象也同样容易。然而,当该COM对象采用的是一个单线程套间模式时,要想同时完成这两者就绝非易事了。大家都知道,Web服务原本就是由一个多线程套间模式所定义的。不过,让一个Web服务向一个单线程的套间模式的COM对象发出命令并不是不可能的;我会告诉你怎样才能做到这点。
何为线程模式?
就像现今绝大多数操作系统一样,Windows也准许你同时运行多个程序。每一个程序实质上就是一个进程(或许在极少的情况下,是一个很多进程的集合体)。一个进程就是一个集合,一个既存储编码和数据的地址空间,又存储其它系统对象和句柄的集合,这些都是一个进程可能会需要的。Windows中的每一个进程都可以胜任执行多线程模式。一个线程的执行,或者仅仅只是简单的线程,在编码中都只有一条执行途径。当该进程开始了以后,一个线程也就开始执行任务了,它是该程序的主要功能。在那里,该主线程可以按照需要分解出其它许多线程。大多数程序开发的目的都只是支持单线程的执行。换句话说,主线程甚至不会分解出任何新的线程。
分解出线程的另一种方法是,假设多重请求来自于同一个对象的类型。例如,当Web服务器接收到第二个请求时,Web服务器就会分解出一个新的线程来为该请求服务。有了Web服务,在其服务程序中,用户对Web服务的每一个新的请求都会自动产生一个新的线程。正是由于这样,Web服务本身就是多线程的。
在COM里,一个COM对象用来控制多线模式的方法很重要,因此你必须清楚地知道外部世界是怎样同该对象进行交流的。使用诸如Visual Basic和 Delphi语言的程序员开发出来的大多数COM对象都是单线程的。换句话说,在他们的程序中,他们并没有很好地理解多线程操作这一概念。
不过,COM对象的选择项里面确实包括单线程和多线程。基本上,一个单线程的COM对象一次只能执行某一单线程所应该执行的任务。而一个多线程对象则允许多个线程同时运行。自由线程,也许你已经听说过,其实不过是多线程对象的另一种名称罢了。并没有谁限定你对每一个对象都必须使用同一种线程模式。