.net - 说服管理层使用 WCF

标签 .net wcf architecture

我问了另一个问题,说明我无法在新的 Web 服务项目中使用 WCF,并且发现它似乎是在可扩展性和安全性方面可以使用的技术。

我的问题很简单:

我如何才能说服管理层(以及开发人员)转而使用 WCF 而不是其他 Web 服务技术 (ASMX/CFC)?他们不会关心比较在类型之间(尤其是关于 ASMX),只是可以得到什么。

最佳答案

Plain-vanilla ASMX 根本不支持 WS-Security 或任何其他 WS-* 扩展。为了实现这些,您需要使用 Microsoft 的 Web Services Enhancements (WSE)。

WSE 是 Microsoft 为满足 .NET Web 服务符合 WS-* 规范的需要而匆忙实现的一个保留解决方案。 WCF 不仅仅是一个升级,它是一个完全的替代品。因此,WSE(以及随后的 ASMX,如果您想使用 WS-* 协议(protocol))正式成为不受支持的产品

那么 - 您的管理层是否想使用官方不支持的产品开始一个新项目?

以下是 WSE 无法提供的所有内容:

  • 技术支持。也许 Stack Overflow 上有人可以帮助您,但 Microsoft 不能。

  • 错误修复。 WSE 3.0(最新发布的版本)的 Visual Studio 集成在 Visual Studio 2008 中不起作用。如果您运行的是 Vista x64 或 Windows 7,它在 Visual Studio 2005 中也不起作用。

  • 新功能。 WCF 提供了性能改进、REST 协议(protocol)、消息队列、基于 TCP/命名管道的二进制序列化、WCF 数据服务(Linq over Web 服务)以及大量新机会。使用 WSE/ASMX,您将永远无法获得这些。

  • Active Directory 集成。哦,当然,它在 WSE 中使用 kerberos 断言“有效”——非常非常糟糕。 WCF 很容易与 Active Directory 集成,默认情况下以这种方式对其进行保护。

  • 故障契约(Contract)。 WSE/ASMX 中的异常处理是残酷的,所有内容都以 SoapExceptionResponseProcessingException 的形式出现。使用 WCF,您实际上可以将强类型的异常(错误)发送回客户端。

  • 回调契约(Contract)。想要在客户端启动一些长时间运行的操作并从服务器收到完成/状态更新的通知?艰难 - 希望你喜欢编写轮询循环。

  • 与新技术的互操作性。有时您可以获得 WSE 3 服务以与 WCF 或 Java 服务对话,但需要一些技巧,但不一定是相反的方式。如果您使用的是 3.0 之前的 WSE 版本,那就算了。相比之下,WCF 能够通过一些微不足道的配置更改来支持 Azure 和 MSMQ。

使用 ASMX/WSE 开始一个新项目等同于在 .NET 1.1 框架上开始一个新项目。在编写第一行代码之前,您的产品将成为“遗留”产品。

如果您的管理层理解“遗留技术”这个术语,而且我怀疑他们理解,那么您可能想要稍微讨论一下。亦作“过时”。也“不受支持”。

我想 WCF 已经存在了 4 年了。这足以在野外发现任何严重问题。没有理由不相信它是一项技术。

事实上,WSE 3 是在 2005 年底发布的,所以它并不比 WCF 老多少!相信一项已有 5 年历史的技术而不相信一项已有 4 年历史的技术是不合逻辑的 - 特别是当对已有 5 年历史的技术的支持已于 2 年前停止时。

关于.net - 说服管理层使用 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540076/

相关文章:

c# - 在异步事件处理程序中返回字符串

.net - .NET 应用程序的插件设计

c# - ORA-00932 : inconsistent datatypes: expected DATE got NUMBER

javascript - WCF REST 身份验证 - 确定 Web 请求

asp.net-web-api - 字符串类型不能构造

c# - 将 XAML 转换为 HTML 时出现“ namespace 像类型一样使用”错误

c# - WCF 服务、Azure SQL 数据库和 ContentType/Binding 错误

c# - 无法从 C# 选择全局临时表 (##TempTable)

architecture - 如何规划我的软件以避免过度重写和相互依赖

c++ - 应用程序级集合的适当架构