【问题标题】:Is there a viable counterpart to DCOM in .NET?.NET 中是否有可行的 DCOM 对应物?
【发布时间】:2010-12-12 05:41:24
【问题描述】:

我知道 .net 有 WCF,我相信它在代号为 Indigo(?) 时被吹捧为 COM 的替代品 - 但它实际上是否适合在 .NET 应用程序中使用,提供与 C++ 相同的功能/ DCOM 应用程序?

客户端-服务器系统上的 DCOM 应用程序可能会很痛苦,但我认为与 Web 服务等其他选项相比,它非常有效 - 无论如何都会有其他问题。

那么,WCF 是 (D)COM 的真正继承者还是有不同的目标?

编辑:我专门讨论分布式应用程序和远程控制 - 例如,服务器可以导致在工作站上启动对话框,工作站可以调用服务器上的方法来发送响应等。我添加了“D”相应地到我的标题。

【问题讨论】:

  • 也许可以解释一下您的主要用例。针对特定场景更容易回答您的问题
  • 我知道的不够多,无法提供答案,但 DCOM 提供了一种跨系统执行 COM(接口方法)的方法。 WCF 是一种通信方式,但我不清楚它是否包含客户端执行接口方法的方式。 WCF 没有类型库,对吗?一个好的答案将解释 WCF 等效的接口和类型库。

标签: .net wcf com dcom


【解决方案1】:

WCF 从来都不是 COM 的替代品。 .NET 框架本身就是 COM 的替代品。

WCF 旨在为编写客户端/服务器应用程序(例如 SOAP Web 服务和远程处理应用程序)提供一个通用接口,独立于所使用的协议/传输/序列化机制。

【讨论】:

  • +1 是的——每个 .NET 类一个 COM 组件,基本上
  • 您说的是 COM,但问题是关于 DCOM。 DCOM是系统提供的COM加系统间通信。
【解决方案2】:

通过选择正确的行为/序列化/协议,您可以非常有效地使用 WCF。 实际上,今天将 COM/DCOM 与 dot-net 一起使用会降低效率,从 dot-net 传递到 com 的速度很慢。

【讨论】:

    【解决方案3】:

    我不知道有任何官方指南指定了 DCOM 的继任者,但 .NET 有两个框架可以替代 DCOM 的使用。它们是 WCF 和 .NET Remoting。

    WCF 可用于替代 DCOM 提供的所有传输功能等。如果您处于无法使用 .NET 3.0 或更新版本的情况;您只有 .NET 远程处理可用。 .NET 中的两个框架都允许您发出调用并将执行控制权转移到其他线程、进程和计算机中的主机。远程处理可能是为了替代 DCOM,它也可以处理几乎所有的传输功能,但采用率并不高。

    一般来说,现在大多数人更喜欢 WCF,因为一切都已明确定义,并且有大量功能可以控制通过 WCF 进行的调用的各个方面。现在,常规的 .NET 远程处理已经有些废弃了,因为您需要管理线路两端的类型信息 - 与 DCOM 相比,负担并没有显着改善。此外,它没有共享内存传输,因此线程/进程内通信仅使用基于套接字的通信进行设置,并且受到环回套接字性能的限制。

    关于您提到的一般场景,几乎任何应用程序都可以通过 WCF 或 Remoting 连接到其他应用程序。大多数棘手的问题都涉及与 Web 应用程序中托管组件的通信。通常,这通常不会完成 - 从它们发出调用,但很少在 http/https 网络活动之外被接受。安全性和身份管理也可能很棘手,但与 DCOM 基于配置的设置相比有了很大改进。

    总体而言,WCF 和 .NET Remoting 都明显优于 DCOM。它们更易于设置和维护,并且不像在 DCOM 下使用的 COM 组件那样令人头疼。此外,您还可以获得内在的好处,例如 .NET 中失败条件的自然库异常;而在 DCOM 中,您将不得不担心如何优雅地处理应用程序代码中的失败交付和超时。仅此一项就可以显着减少为处理此类情况而必须编写的代码量,并且通过异步调用,您还可以随时退出长时间操作。这在 DCOM 中要做好是相当棘手的。

    【讨论】:

      【解决方案4】:

      每项技术都有自己的优势。 WCF 不能替代 COM。

      使用 COM 的场景:

      我们可以利用 .Net 应用程序的现有技术。 原因:许多组织(银行/电信/医疗保健系统)可能会在其自动化上投入大量资金。他们喜欢用最新的技术迁移(不是所有的业务流程,它应该是流程的一部分)。那么,就可以选择最新的技术了。但是,它们遵循现有代码的业务流程(代码可以是任何东西,COM...)。因此,它将减少开发成本、时间、调试和更多因素。每项技术都应该提供向后兼容性,否则将无法适应这个竞争激烈的世界。这就是.Net 引入互操作性的原因。 (RCW、CCW 等)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-26
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多