【问题标题】:Is WCF ready for real world?WCF 准备好迎接现实世界了吗?
【发布时间】:2011-04-10 17:18:45
【问题描述】:

我在这里读到http://arunatennakoon.blogspot.com/2010/11/things-i-learn-new-this-week.html

Friday, November 12, 2010
Things I learn new this week
1. Never ever use WCF.
---------------------

here is why
1. IIS 7 doesn't support .svc file format by default. So you need to

安装一些扩展文件。所以是 新产品的大量工作。

2. I found it very hard to configure security settings. when i

第一次尝试配置 它抛出了各种错误。

3. After installing WCF in IIS, sometimes it's trowing an exception

指的是临时目录。至 解决这个问题你必须重新 编译应用程序和 重新分配

and a lot more...

那么你会冒险使用 WCF 吗?

我想听听真实世界中每年点击数以千亿计的例子。

【问题讨论】:

  • 我看到您接受了一个答案,该答案与您引用的博客上的不明智和肤浅的偏见相吻合,并且怀疑您分享了哪个答案。你的选择,你的损失。事实上,世界各地的许多人都从 WCF 中获得了巨大的价值。如果你想在没有正确评估的情况下否认自己,那就继续吧。
  • 这取决于你工作的项目,如果性能真的是你必须牺牲抽象的关键。所有这些抽象的问题在于它们没有告诉你它是如何真正工作的,以便你可以平衡。所以我同意这篇文章bluebytesoftware.com/blog/2010/09/06/…,但是当你不是 MS Insider 或者你是有矛盾意见的项目经理时,你会选择风险较小的那个。

标签: asp.net wcf


【解决方案1】:

它绝对为现实世界做好了准备。甚至微软也在其产品中使用它,例如 MS Dynamics CRM 服务现在在 WCF 中完成。

【讨论】:

  • 微软使用它并不是一个真正的证据,因为当他们的东西有问题时,他们可以轻松破解它,而当你或我有问题时,你不能进入盒子...... :)
  • @user310291 由于 WCF 是托管代码,实际上我们可以在需要时使用 ILDASM 或 Reflector 进入盒子内部。 WCF 还具有很强的可扩展性,因此我们可以在需要时控制它的几乎所有方面。
  • 进入 ILDASM 的盒子就是成为一名黑客。对于企业世界,这不是好的质量保证,因为技术不能要求普通开发人员成为黑客,特别是因为他在业务层面有很多事情要做。
【解决方案2】:

WCF 绝对已经为现实世界做好了准备。是的,有时它是矫枉过正的,所以首先你必须知道你是否真的需要它。如果您需要 WS-* 协议栈,或者如果您需要与非 MS 平台的 Web 服务互操作性,您将需要 WCF。我经常使用 WCF,对此我很满意。

IMO WCF 是提供的第三佳 API MS(.NET Core 第一,ASP.NET MVC 第二)。它有很多扩展点,你几乎可以做任何事情。但这并不容易。 WCF 适用于成熟的熟练开发人员 - 这是 WCF 的主要缺点。

文章中提到的原因很愚蠢。这就像说 ASP.NET 4.0 还没有为现实世界做好准备,因为有时你必须运行 aspnet_regiis.exe 才能在 IIS 中注册 .NET 4.0 运行时,或者说 Lambda 表达式还没有为现实世界做好准备,因为你必须学习如何使用它们。

【讨论】:

  • 不是所有的理由都是傻的 这一个也不是傻:在 IIS 中安装 WCF 后,有时它会抛出一个引用临时目录的异常。要解决此问题,您必须重新编译应用程序并重新分发
【解决方案3】:

是的,肯定,WCF 已准备好在现实世界中使用,并且正在被世界各地的许多大大小小的公司使用。

是的,在 IIS 中托管很糟糕 - 但这不是 WCF 的错,它是 IIS,它实际上只是一个 Web 服务器 - 而不是应用程序主机。

因此,对于任何严肃的生产级 WCF 服务,我建议始终自托管。跳过所有与 IIS 相关的混乱,让您完全控制您的服务和端点 - 对我来说听起来都不错!

【讨论】:

  • ...或者花钱请人来主持 (而不是你 + 20k 其他用户在一个盒子上:p)
【解决方案4】:

我跳过了 wcf。

主要原因是它会导致大量额外的代码/工作,而与现有机制相比几乎没有什么好处。

我曾经使用 asmx 路线,但我发现它们对于我们通常需要的东西来说甚至太重了。我还发现,至少在几年前,许多用于处理“Web 服务”的 java 框架并不能很好地处理我们需要的一些高级功能。

坦率地说,通过发布/获取到 ashx 文件的常规 httpwebrequests 非常简单、健壮和动态。而您将花费大量时间让 wcf 正常工作。

当然,我唯一一次在 Visual Studio 中单击“设计器”选项卡是偶然的。也许我是一个享乐主义者……或者只是厌倦了所有关于这些技术如何使我们的应用程序更“可互操作”的营销言论。

【讨论】:

  • 收益很少?我想让服务参与 TransactionScope 并不是每个人都需要的,但是当你需要它时它具有很大的价值。这只是其中一项功能。
  • 至少在性能方面的好主意会尝试这种老派的东西:)
  • 我同意,对于网络内容,与网络服务相比,使用它并没有太多好处。当您有其他传输(TCP、命名管道等)时,它会更有用。它为所有传输提供了相同的编程模型,因此您可以专注于实现。
  • 附带说明,我在使用 java 服务时遇到的问题是找出 DIME 和 MTOM 二进制附件模型。基本上,Biztalk 需要肥皂信封来正确验证,而 Java 工具(当时),嗯,没有。我们最终让 java 调用了一个 C# Web 服务(它更宽容),然后称为 Biztalk。 PITA,但它奏效了。因此,我们现在只使用基础知识的原因之一。
  • @Peter LaComb Jr., @Taras B:你的两个 cmets 都是参加 WCF 的好理由(两个 cmets +1);如果应用程序确实需要这些项目。当然,如果我的应用程序需要事务作为 Web 服务调用的一部分,我可能会在使用 WCF 之前使用 Biztalk 或 Windows Workflow。另外,我认为我不需要支持不同的协议(例如命名管道)。
【解决方案5】:

我看到很多关于在 HPC 世界中使用 WCF 的文章,所以我想我们必须等待并找出答案:)

我很喜欢 ASMX

【讨论】:

    【解决方案6】:

    我最近对 ​​WCF 进行了很多抨击。它笨重、笨重和过度,但不要误会我的意思,它非常丰富和灵活。

    是的,它已经为现实世界做好了准备,已经在数千个大型项目中使用。

    我已经在两个项目中使用过。

    现在,如果您只需要轻量级、少量设置的 HTTP 调用,请使用 ASP.NET MVC 中的 JSON+HTTP 或新的 WCF's separate HTTP stack

    【讨论】:

    • 丰富和灵活并不意味着像我一样为现实世界做好准备,因为现实世界意味着性能和可扩展性,简单的项目生命周期管理(也就是看起来很麻烦的部署)。至于大规模是什么意思?对我来说,这意味着每年至少有数亿到数十亿的点击量(这是我项目目前的规模)。
    • 大部分的可扩展性是在架构和设计级别而不是技术级别实现的。我或多或少同意你的观点,但不会马上敲掉它。在这里阅读我的咆哮:stackoverflow.com/questions/3710635/…
    • 可扩展性是一回事,性能是另一回事。说一切只依赖于架构被夸大了,对于某些实时应用程序来说,websocket 将比 http 提供更好的性能
    【解决方案7】:

    在世界各地的大型企业中,有许多将 WCF 用于任务关键型功能的实际解决方案。举一个我个人知道的例子:英国最大的电脑游戏零售商之一的电子商务网站广泛使用 WCF 服务来驱动网站并实现订单履行。它拥有数百万的客户,产生了数以亿计的点击量。

    WCF 是主流。在具有良好 QA 流程的 SDLC 中,只要(与任何框架一样)您不厌其烦地理解和正确使用它,就没有隐藏的风险。

    【讨论】:

    • 感谢这个例子。至于“众多”,我看不到这么多广告。关键任务并不意味着它在技术上具有挑战性。当我说现实世界时,我的意思是高负载用户和复杂的工作流程。
    【解决方案8】:

    WCF 比 webservice 更灵活。我们可以根据需要使用不同类型的传输协议。它还包含现代安全模型。

    【讨论】:

      【解决方案9】:

      到目前为止,部署 WCF 项目没有任何问题。我正在用它构建一个非常简单的应用程序(实际上,应用程序并不那么简单,但服务层很简单),并且已经将 WCF 部署到三个环境(开发、集成测试和用户测试),没有任何麻烦。

      我选择了 WCF,因为 asmx 不能处理循环对象图,而 WCF 可以。

      【讨论】:

      • 如果你的应用很简单,那不是我所说的真实世界:)
      【解决方案10】:

      我们在项目中处理 WCF,并且在大多数情况下,它使服务启动和运行变得更加简单。 WCF 使得处理 REST 样式的服务变得非常简单,提供了一种机制来挂钩到它的堆栈以自定义 Web 请求的处理方式,并允许分离特定于 Web 的内容和您的业务层。

      【讨论】:

        猜你喜欢
        • 2018-03-24
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        相关资源
        最近更新 更多