2008-11-18 80 views
6

使用COM在WCF上开发组件时得到什么深刻的优势?有没有什么可以用COM来完成,而不是用WCF?COM死了吗?

回答

8

不,它还没死,但它在死亡床上,这是肯定的。你会发现仍然有很多使用/需要COM的遗留系统,这可以保证我们会在几年后与我们在一起,但从长远来看不会。

对于WCF,可能会出现一些COM可以做的边缘情况,而WCF不能,但更重要的是,它与传统的东西有关,就是几乎所有可以使用的语言都有COM绑定一个窗口堆栈,但WCF绑定尚未准备好给大家(语言)

+2

有代码在COM做......将它移植了大量的管理方是一个巨大的问。例如MS Office仍然是COM。要从头开始再做一次word或excel将是一个巨大的错误/时间下沉。 – Gishu 2008-11-18 15:55:24

+0

@Gishu - 完全同意...办公室和它需要保持向后兼容性将使COM活得比其他任何东西都长。在主流中转向64位可能会改变方程。 – 2008-12-04 15:05:31

7

取决于您要挖掘的系统有多深。 COM永远不会'死',与非托管语言永远不会一样。为了长话短说,如果您为Vista +开发桌面应用程序,您可能不再需要使用COM了。

0

如果我没有弄错,.NET的目的是取代像COM和WFC这样的技术。是否有一个原因(遗留代码除外),人们会选择COM或WFC而不是.NET?

+0

WCF(windows通信基础)是.NET Framework 3.0的一部分。这不是传统技术。 – 2008-11-18 07:47:08

4

我不认为COM死了。如果你看看Vista,它会使用很多COM架构/技术。 Vista中的每件事都是COM Dll/Exe。 我觉得与XP相比,Vista使用了如此多的COM。

如果我们想在Vista中扩展任何东西,我们必须使用COM来实现接口。

4

有几个不同的方面:

  1. 组件将运行在与多台计算机进行交互(如服务)
  2. 成分,只有在本地运行,并与多个供应商通过ABI实现的组件进行交互。
  3. 由单个供应商撰写而无需与第三方组件交互的组件。
  4. 来自多个供应商的可用于源代码的组件,可以编译为单个应用程序。

(ABI =应用程序二进制接口。COM是在ABI的一个例子。)

对于方面1,COM是相当多的死亡。

方面2仍然需要COM,并将继续。 Windows Imaging Component是这种可扩展性的一个很好的例子,它允许任何人实现新的图像编解码器。 .Net在这方面是一个有力的竞争者。

对于方面3,COM仍然值得考虑,但是这是每个软件供应商的决定。用于室内使用的组件开发人员有一天可以作为产品销售。 .Net在这里似乎也是一个不错的选择。

对于方面4,可以简单地调整和组合来自许多开源项目的源代码。不需要COM或任何ABI。

不幸的是,COM作为一个非托管ABI很难防御错误,因为代码和数据在同一个内存空间中,并且该堆栈用于数据和执行调用堆栈。一个COM组件中的任何可利用的漏洞都可以用于导致加载到同一地址空间的任何其他COM组件发生不稳定。