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

问题描述 投票:84回答:16

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

是否有替代使用SvcUtil的命令行回溯产生代理?通过ASMX服务,自动提供测试工具; WCF今天有一个很好的选择吗?

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

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

你有没有很好的WCF学习参考,除了继续谷歌bejebus的东西?

wcf web-services
16个回答
61
投票

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

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

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

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

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


2
投票

WCF是Microsoft所有早期Web服务技术的替代品。它的功能远远超过传统上被视为“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的功能范围。

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

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

在什么情况下必须使用WCF

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

WCF的功能

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

来源:main source of text


1
投票

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


1
投票

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

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


1
投票

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


1
投票

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


1
投票

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

如果有人有任何快捷方式或提示,那将是很好的。


1
投票

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

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

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

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

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



14
投票

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

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


13
投票

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

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


6
投票

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


4
投票

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

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

}

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

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


4
投票

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

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

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


3
投票

如果您正在使用VS2008并创建一个WCF项目,那么当您点击运行/调试时,您将自动获得测试工具,并且您可以添加引用而无需使用svcutil。


2
投票

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

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