WCF:跆拳道! WCF提高了标准还是复杂度?

我了解WCF提供的三部分服务/主机/客户端模型的价值。 但是,这仅仅是我还是看起来像WCF采取了一些相当直接和简单的(ASMX模型),并把它弄得一团糟?

是否有替代使用SvcUtil的命令行时间来生成代理? 使用ASMX服务,testing设备自动提供; WCF今天有一个很好的select吗?

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

另外,WCF可用的书籍状态最好还是糟透了。 一位出色的作者Juval Lowy写了一本很好的O'Reilly参考书“编程WCF服务”,但是现在学习使用WCF并没有那么多(对我来说)。 这本书的前身(组织好一点,但不多,作为教程)是Michele Leroux Bustamante的Learning WCF。 它有很好的地方,但是已经过时了,其相应的网站已经不存在了。

除了继续Google的事情之外,你还有很好的WCF学习参考吗?

谢谢,rp

好的,我们走吧。 首先,Michele Leroux Bustamante的书已经更新为VS2008。 这本书的网站并没有消失。 现在,它有很多伟大的WCF信息。 在她的书中,她提供了与VS2008兼容的更新代码。 如果你从亚马逊订购,你会得到更新的重印。

WCF 不仅是ASMX的替代品。 当然,它可以(而且很好)取代ASMX,但真正的好处是它可以让你的服务自行托pipe。 WSE的大部分function已经从一开始就被烘托了。 这个框架是高度可configuration的,并且通过多个协议服务多个端点的能力是惊人的,IMO。

虽然您仍然可以通过“添加服务引用”选项生成代理类,但这不是必需的。 你所要做的只是复制你的ServiceContract接口并告诉你的代码在哪里find服务的端点,就是这样。 你可以用很less的代码从服务中调用方法。 使用这种方法,您可以完全控制实施。 无论您select创build代理类的方式如何,Michele都可以在这个主题上进行精彩的系列网播。

米歇尔有很多很棒的材料,我build议你看看她的网站。 当我学习WCF时,这里有一些对我非常有帮助的链接。 我希望你能认识到WCF究竟有多强大,实现起来多么容易。 学习曲线有点陡峭,但您的时间投资奖励是值得的:

  • Michele的networking广播: http : //www.dasblonde.net/2007/06/24/WCFWebcastSeries.aspx
  • 米歇尔的书籍网站(活着并更新了VS2008): http : //www.thatindigogirl.com/

我build议你至less看Michele的networking广播中的一个。 她是一个非常有效的主持人,当谈到WCF时,她显然是非常有知识的。 她从头到尾都对WCF的内部运作做了很好的阐述。

我很难看到什么时候应该或将要使用WCF。 为什么? 因为我把生产力和简单性放在我的名单上。 为什么ASMX模型如此成功,因为它能够工作,而且能够快速工作。 而与VS 2005和.NET 2.0 wsdl.exe吐出相当不错,兼容的服务。

在现实生活中,你的体系结构中应该只有很less的通信协议。 这使它简单易维护。 如果您需要访问旧版系统,请为其编写特定的适配器,以便他们可以在美丽的shiny和美丽的SOA世界中一起玩。

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

在我看来,WCF提供的附加function远远超过了它所增加的复杂性。 我也觉得编程模型更容易。 例如,DataContracts要比使用XML公共属性序列化序列化要好得多。 这也是更多的声明性质,这也是很好的。

等等….你有没有使用.NET Remoting,因为这是真正的东西它的替代。 .NET Remoting本身相当复杂。 我发现WCF更容易,更好地布局。

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

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

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

消除分离的数据,服务和操作合同的冗长,对于使WCF更易于pipe理起到了很大的作用。

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

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

我会承认,我还有其他与WCF有关的问题(例如,在通过basicHTTP公开服务时重写方法签名 – 请参见此处 ,但总的来说,我认为这是一个明确的改进

如果您使用VS2008并创build一个WCF项目,那么当您运行/debugging时您将自动获得一个testing工具,并且您可以添加一个引用而不必使用svcutil。

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

  1. 使用generics编程您自己的代理/客户端层(参见ClientBase ,Binding类)。 我发现这很容易工作,但很难完美。
  2. 使用第三方实现1( SoftwareIsHardwork是我目前最喜欢的)

MSDN? 我通常对库引用本身做得很好,我通常期望在那里find有价值的文章。

就它提供的内容而言,我认为答案是兼容性。 ASMX服务相当微软。 不是说他们没有试图与其他消费者兼容; 但是除了ASP.NET网页和一些其他定制的微软消费者之外,这个模型并不适合。 而WCF,因为它的架构,允许你的服务具有非常开放的基于标准的端点,例如REST,JSON等。 其他人可能比你的ASMX更容易花费你的WCF服务。

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

WCF不应该被认为是ASMX的替代品。 判断它是如何定位的,以及它是如何被微软内部使用的,这实际上是一种用于任何types的跨界通信的基本架构。

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

我用WCFfind的困难之处在于pipe理客户端和服务器的configuration,以及对不太好的故障状态exception进行故障排除。

如果有人有任何捷径或技巧,这将是非常好的。

我觉得这是一种痛苦; 因为我在两端都有.NET,在两端都加载了相同的“合同”DLL。但是,我不得不惹恼诸如“KnownType”属性的许多细节。

WCF也默认只让1或2个客户端连接到一个服务,直到你改变了大量的configuration。 从代码中更改configuration并不容易,因为很难将更改合并到客户在升级时可能做出的任何更改中(我们也不希望客户玩WCF设置!)

.NET远程处理大多数情况下只是工作。

我认为试图假设 .NET到.NET基于对象的通信与将Text(xml)发送给未知系统的过程相同,这是一个很大的步骤。

(我们几次使用WCF与Java系统进行交谈,发现Java系统提供的XSD与其所需的XML不匹配,所以必须手动编写大量的XML映射。)

WCF是Microsoft早期的所有Web服务技术的替代品。 它也比传统上被认为是“networking服务”更多。

WCF“Web服务”是通过WCF实现的更广泛的远程通信的一部分。 在WCF中执行事务的灵活性和可移植性要高于传统的ASMX,因为WCF从头开始devise来总结Microsoft提供的所有不同的分布式编程基础结构。 WCF中的一个端点可以通过SOAP / XML轻松地进行通信,因为它可以通过TCP /二进制文件进行通信,并且更改此介质只是一个configuration文件mod。 从理论上讲,这可以减less移植或改变业务需求,目标等时所需的新代码的数量。

ASMX is older than WCF, and anything ASMX can do so can WCF (and more) 。 基本上你可以看到WCF试图在逻辑上将所有不同的方式组合在一起,使得两个应用程序在微软的世界中进行交stream; ASMX只是其中的一种方式,所以现在归入WCF的能力范围之内。

Web服务只能通过HTTP访问,它可以在无状态的环境中工作,WCF是灵活的,因为它的服务可以托pipe在不同types的应用程序中。 托pipeWCF服务的常见scheme是IIS,WAS,自托pipe,托pipeWindows服务。

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

在什么情况下,必须使用WCF

  • 处理业务交易的安全服务。 一项服务
  • 将当前数据提供给其他人,如交通报告或其他
  • 监控服务。 允许两个人聊天的服务
  • 沟通或交换数据的实时。 仪表板应用程序
  • 轮询一个或多个服务的数据,并将其呈现在逻辑上
  • 介绍。 公开使用Windows Workflow实现的工作stream
  • 作为WCF服务的基础。 一个Silverlight应用程序来轮询一个
  • 为最新的数据提供服务。

WCF的function

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

来源: 文本的主要来源