WCF会提高标准还是仅提高复杂程度?

时间:2008-09-08 16:42:21

标签: wcf web-services

我理解WCF提供的三部分服务/主机/客户端模型的价值。但是它只是我还是看起来像WCF采取了一些非常直接和直接的东西(ASMX模型)并且弄得一团糟?

是否有替代方法可以及时使用SvcUtil的命令行来生成代理?通过ASMX服务,自动提供测试工具; WCF今天有一个很好的选择吗?

我很欣赏WS *的东西与WCF更紧密地集成,并希望在那里找到WCF的一些回报,但是geeze,否则我很困惑。

此外,WCF可用的书籍状态充其量也很糟糕。 Juval Lowy,一位出色的作者,写了一本很好的O'Reilly参考书“编程WCF服务”,但是现在学习使用WCF并没有那么多(对我而言)。 Michele Leroux Bustamante的学习WCF是该书的前身(并且组织得更好,但并不多,作为教程)。它有很好的位置,但已经过时,相应的网站已经消失。

除了向Google推出bejebus外,你有没有很好的WCF学习参考?

16 个答案:

答案 0 :(得分:61)

好的,我们走了。首先,Michele Leroux Bustamante的书已经针对VS2008进行了更新。这本书的网站没有消失。它现在正在运行,它有很多很棒的WCF信息。在该网站上,她为本书中的所有示例提供了与VS2008兼容的更新代码。如果您从亚马逊订购,您将获得更新的重印。

WCF不仅 是ASMX的替代品。当然它可以(而且相当不错)取代ASMX,但真正的好处是它允许您的服务自我托管。 WSE的大部分功能从一开始就已经完成。该框架高度可配置,并且通过多种协议为多个端点提供服务的能力令人惊叹,IMO。

虽然您仍然可以从“添加服务引用”选项生成代理类,但这不是必需的。您真正需要做的就是复制ServiceContract接口并告诉您的代码在哪里找到服务的端点,就是这样。您可以使用非常少的代码从服务中调用方法。使用此方法,您可以完全控制实现。无论您选择哪种方法来生成代理类,Michele都会在她的优秀系列网络广播中同时展示并同时使用这两种方法。

米歇尔有很多很棒的材料,我建议你查看她的网站。在我学习WCF时,这里有一些对我非常有帮助的链接。我希望你能够意识到WCF到底有多强大,以及实施起来有多容易。学习曲线有点陡峭,但您投入时间的回报非常值得:

我建议您至少观看Michele的一次网络广播。她是一位非常有效的主持人,当涉及到WCF时,她显然非常了解。她从根本上揭开了WCF的内部运作的神秘面纱。

答案 1 :(得分:15)

答案 2 :(得分:14)

我很难看到我应该或将要使用WCF的时间。为什么?因为我把生产力和简单性放在我的列表之上。为什么ASMX模型如此成功,因为它起作用,并且让它快速工作。使用VS 2005和.NET 2.0,wsdl.exe正在吐出相当不错的合规服务。

在现实生活中,您的架构中应该只有很少的通信协议。这使其简单易维护。如果您需要访问遗留系统,请为它们编写特定的适配器,以便它们可以在漂亮而美丽的SOA世界中发挥作用。

答案 3 :(得分:13)

WCF比ASMX强大得多,它以多种方式扩展它。 ASMX仅限于HTTP,而WCF可以使用多种协议进行通信(授权,HTTP仍然是大多数人使用它的方式,至少对于需要可互操作的服务而言)。 WCF也更容易扩展。至少,可以以不能扩展ASMX的方式扩展它。 “简单”可能会拉伸它。 =)

在我看来,WCF提供的附加功能远远超过它增加的复杂性。我也觉得编程模型更容易。例如,DataContracts比使用带有公共属性的XML序列化序列化要好得多。它本质上也更具说明性,也很好。

答案 4 :(得分:6)

等等....你曾经使用.NET Remoting,因为它取代了真正的东西。 .NET Remoting本身非常复杂。我发现WCF更容易,也更好。

答案 5 :(得分:4)

我没有经常提到它,但是可以仍然使用WCF实现相当简单的服务,非常类似于ASMX服务。例如:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

你仍然需要在web.config中注册终点,但这并不是那么糟糕。

消除分离的数据,服务和操作合同的冗长程度对于使我的WCF更易于管理有很长的路要走。

答案 6 :(得分:4)

VS2008包含“添加服务参考”上下文菜单项,它将在幕后为您创建代理。

如前所述,WCF不仅仅是作为ASMX Web服务类型的替代品,而是为所有可互操作的服务提供一致,安全和可扩展的方法,无论是通过HTTP,TCP,命名管道还是MSMQ传输。

我将承认我确实遇到了WCF的其他问题(例如,在通过basicHTTP公开服务时重写方法签名 - 请参阅here,但总的来说我认为这是一个明确的改进

答案 7 :(得分:3)

如果你正在使用VS2008并创建一个WCF项目,那么当你点击run / debug时你会自动获得一个测试工具,你可以添加一个引用,而不必使用svcutil。

答案 8 :(得分:2)

我对WCF的初步想法完全一样!以下是一些解决方案:

  1. 使用泛型编写您自己的代理/客户端层(请参阅类ClientBase,绑定)。我发现这很容易上班,但很难完美。
  2. 使用第三方实现1(SoftwareIsHardwork是我目前最喜欢的)

答案 9 :(得分:2)

WCF 可替代Microsoft以前的所有 Web服务技术。它的功能远远超过传统上被视为“网络服务”的功能。

WCF“Web服务”是通过WCF启用的更广泛的远程通信范围的一部分。与传统的ASMX相比,您将在WCF中获得更高程度的灵活性和可移植性,因为WCF是从头开始设计的,用于总结Microsoft提供的所有不同的分布式编程基础架构。 WCF中的端点可以通过SOAP / XML与TCP /二进制文件一样轻松地进行通信,并且更改此介质只是一个配置文件mod。从理论上讲,这可以减少移植或更改业务需求,目标等所需的新代码量。

ASMX is older than WCF, and anything ASMX can do so can WCF (and more)。基本上你可以看到WCF试图将所有不同的方式组合在一起,让两个应用程序在微软世界中进行通信; ASMX只是众多方式中的一种,因此现在归入WCF的能力范围。

只能通过HTTP访问Web服务。它在无状态环境中工作,WCF非常灵活,因为它的服务可以托管在不同类型的应用程序中。托管WCF服务的常见方案是IIS,WAS,自托管,托管Windows服务。

主要区别在于Web Services使用XmlSerializer。但WCF使用DataContractSerializer,与XmlSerializer相比,性能更好。

必须使用WCF的场景

  • 处理业务交易的安全服务。
  • 的服务
  • 向其他人提供当前数据,例如流量报告或其他
  • 监控服务。允许两个人
  • 的聊天服务
  • 实时通信或交换数据。仪表板应用程序
  • 轮询一个或多个服务以获取数据并以逻辑
  • 显示
  • 呈现。公开使用Windows Workflow实现的工作流程
  • 作为WCF服务的基础。用于轮询
  • 的Silverlight应用程序
  • 为最新数据Feed提供服务。

WCF的功能

  • 服务导向
  • 互操作性
  • 多种消息模式
  • 服务元数据
  • 数据合同
  • 安全
  • 多种传输和编码
  • 可靠和排队的消息
  • 耐用消息
  • 交易
  • AJAX和REST支持
  • 扩展

来源:main source of text

答案 10 :(得分:1)

MSDN?我通常对图书馆参考本身做得很好,我通常希望在那里找到有价值的文章。

答案 11 :(得分:1)

就其提供的内容而言,我认为答案是兼容性。 ASMX服务非常漂亮。并不是说他们没有尝试与其他消费者兼容;但除了ASP.NET网页和其他一些自定义Microsoft消费者之外,该模型并不适合。而WCF由于其架构,允许您的服务具有非常开放的基于标准的端点,例如REST,JSON等除了通常的SOAP之外。其他人可能比您的ASMX服务更容易耗费您的WCF服务。

(这基本上都是从比较MSDN阅读中推断出来的,所以知道更多的人应该随时纠正我。)

答案 12 :(得分:1)

不应将WCF视为ASMX的替代品。根据微软如何定位以及如何在内部使用它,它实际上是一个用于任何类型的跨境通信的基础架构。

答案 13 :(得分:1)

我相信WCF在很多方面确实推动了ASMX Web服务的实施。首先,它提供了一个非常好的分层对象模型,有助于隐藏分布式应用程序的内在复杂性。 其次,您可以拥有多个请求重播消息传递模式,包括从服务器到客户端的异步通知(不可能使用纯HTTP),第三,从XML消息传递中抽象出底层传输协议,从而优雅地支持HTTP,HTTPS,TCP等。向后兼容“第一代”Web服务也是一个优势。 WCF使用XML标准作为内部表示格式。这可能被视为优势或劣势,特别是随着越来越流行的“无脂肪替代XML”,如JSON。

答案 14 :(得分:1)

我在WCF中遇到的困难是管理客户端和服务器的配置,并对不那么好的故障状态异常进行故障排除。

如果有人有任何快捷方式或提示,那就太棒了。

答案 15 :(得分:1)

我发现这是一种痛苦;因为我在两端都有.NET,在两端加载了相同的“契约”dll等等。但是后来我不得不搞砸了很多细节,比如“KnownType”属性。

WCF也默认只允许1或2个客户端连接到服务,直到您更改大量配置。从代码更改配置并不容易,因此很难将我们的更改合并到客户在升级时可能做出的任何更改(我们也不希望客户),因此无法提供大量的配置文件。玩WCF设置!)

.NET远程处理在大多数情况下都倾向于工作。

我认为尝试假装基于.NET到.NET对象的通信与将Text(xml)的位发送到未知系统相同,这是一个太过分了。

(我们几次使用WCF与Java系统交谈,我们发现java系统提供的XSD与它想要的XML不匹配,所以不得不手工编写大量的XML映射。)