Does WCF raise the bar or just the complexity level?我了解WCF提供的三部分服务/主机/客户端模型的价值。但是,仅仅是我还是WCF似乎采取了一些直接而直接的方法(ASMX模型)并弄得一团糟? 除了使用SvcUtil的命令行后退一步来生成代理之外,还有其他方法吗?通过ASMX服务,自动提供了测试工具。今天使用WCF有什么好的选择吗? 我感谢WS *与WCF紧密集成,并希望在那里找到WCF的回报,但是请稍等一下,否则我会感到困惑。 而且,可用于WCF的书籍充其量只能说是糟糕透顶。 Juval Lowy是一位出色的作家,他写了一本很好的O'Reilly参考书" Programming WCF Services",但对于现在学习使用WCF来说(无论如何对我来说)做得并不多。那本书的前身(是一个更好的组织,但作为一个教程却不多)是Michele Leroux Bustamante的Learning WCF。它有很多优点,但是过时了,相应的网站也消失了。 除了继续使Google脱颖而出之外,您是否还有很好的WCF学习参考资料? 好的,我们开始。首先,Michele Leroux Bustamante的书已针对VS2008更新。该书的网站没有消失。现在就开始了,它包含大量的WCF信息。在该网站上,她为书中的所有示例提供了与VS2008兼容的更新代码。如果您从亚马逊订购,您将获得更新的重印本。 WCF不仅是ASMX的替代品。当然,它可以(并且做得很好)代替ASMX,但是真正的好处是它可以使您的服务成为自托管的。 WSE的大多数功能从一开始就已经具备。该框架是高度可配置的,并且通过多种协议为多个端点提供服务的能力非常出色,IMO。 虽然您仍然可以通过"添加服务引用"选项生成代理类,但这不是必需的。您真正要做的就是复制ServiceContract接口,并告诉代码在哪里可以找到服务的端点,仅此而已。您可以使用很少的代码从服务中调用方法。使用此方法,您可以完全控制实现。无论选择哪种方法生成代理类,Michele都会在这方面的出色网络广播中同时显示和使用这两种方法。 Michele那里有很多很棒的资料,我建议您查看她的网站。在学习WCF时,以下一些链接对我非常有用。我希望您能认识到WCF到底有多强大,以及实现起来多么容易。学习曲线有些陡峭,但是您的时间投入所带来的回报是值得的:
我建议您至少观看Michele的网络广播之一。她是一位非常有效的演示者,在WCF方面,她显然学识渊博。她从根本上揭开了WCF的内部运作神秘面纱。 我通常使用Google查找WCF答案,并通常在以下博客中找到自己: 包含有价值的WCF文章的博客
我发现的其他有价值的文章
我很难确定何时应该使用WCF。为什么?因为我将生产力和简单性放在了首位。为什么ASMX模型如此成功,因为它可以工作,而且您可以快速工作。在VS 2005和.NET 2.0中,wsdl.exe吐出了非常不错且合规的服务。 在现实生活中,您的体系结构中应该只有很少的通信协议。这使其易于维护。如果您需要使用旧系统,请为它们编写特定的适配器,以便它们可以在漂亮而又漂亮的SOA世界中使用。 WCF比ASMX强大得多,它以多种方式对其进行了扩展。 ASMX仅限于HTTP,而WCF可以使用多种协议进行通信(当然,HTTP仍然是大多数人使用它的方式,至少对于需要互操作的服务而言)。 WCF也更容易扩展。至少可以通过无法扩展ASMX的方式对其进行扩展。"简单"可能正在扩展它。 =) 在我看来,WCF提供的附加功能远远超过它所添加的复杂性。我也觉得编程模型更容易。例如,DataContracts比必须使用具有公共属性的XML序列化进行序列化要好得多。它在本质上也更具声明性,这也很好。 等等...。您曾经使用过.NET Remoting吗,导致多数民众赞成在取代它。 .NET Remoting本身非常复杂。我发现WCF更容易且布局更好。 我看不到它经常被提及,但是您仍然可以使用WCF实现相当简单的服务,与ASMX服务非常相似。例如:
您仍然必须在web.config中注册端点,但这还不错。 消除分离的数据,服务和操作合同的冗长性对于使WCF对我来说更易于管理大有帮助。 VS2008包括"添加服务引用"上下文菜单项,该菜单项将在后台为您创建代理。 如前所述,WCF不仅旨在替代ASMX Web服务类型,而且还为所有可互操作的服务提供一致,安全和可扩展的方法,无论是通过HTTP,TCP,命名管道还是MSMQ传输。 我承认我确实还有WCF的其他问题(例如,在通过basicHTTP公开服务时重写方法签名-请参阅此处,但总的来说我认为这是绝对的改进) 如果您使用VS2008并创建WCF项目,则在单击运行/调试时会自动获得测试工具,并且可以添加引用,而不必使用svcutil。 WCF替代了Microsoft的所有早期Web服务技术。它的功能还远远超出了传统上所谓的" Web服务"。 WCF" Web服务"是通过WCF启用的更广泛的远程通信范围的一部分。与通过传统的ASMX相比,在WCF中做事的灵活性和可移植性要高得多,因为WCF是从头开始设计的,旨在总结Microsoft提供的所有不同的分布式编程基础结构。 WCF中的端点可以通过SOAP / XML进行通信,就像通过TCP / binary一样容易地进行通信,而更改此媒体仅是配置文件mod。从理论上讲,这减少了在移植或更改业务需求,目标等时所需的新代码量。
Web服务只能通过HTTP进行访问,并且可以在无状态环境中使用,因为WCF可以在不同类型的应用程序中托管,因此WCF十分灵活。托管WCF服务的常见方案是IIS,WAS,自托管,托管Windows服务。 主要区别在于Web服务使用XmlSerializer。但是WCF使用的DataContractSerializer与XmlSerializer相比在性能上更好。 在什么情况下必须使用WCF
WCF的功能
来源:主要文字来源 我最初对WCF的想法是完全一样的!以下是一些解决方案:
我相信WCF确实可以从许多方面推动ASMX Web服务的实现。首先,它提供了一个非常好的分层对象模型,可以帮助隐藏分布式应用程序的内在复杂性。 MSDN?我通常会对Library参考本身做得很好,而且通常希望在那里找到有价值的文章。 我发现使用WCF的困难之处在于管理客户端和服务器的配置,以及对不太好的故障状态异常进行故障排除。 如果有人有任何快捷方式或提示,那就太好了。 就其提供的功能而言,我认为答案是兼容性。 ASMX服务非常Microsofty。并不是说他们没有尝试与其他消费者兼容。但是除了ASP.NET网页和其他一些自定义的Microsoft使用者之外,该模型的适用性并不高。而WCF由于其体系结构而使您的服务具有基于开放标准的端点,例如除了常用的SOAP之外,还包括REST,JSON等。与ASMX相比,其他人使用WCF服务的时间可能要容易得多。 (这基本上是从MSDN比较阅读中得出的,因此,了解更多的人应该随时纠正我。) 我发现这很痛苦;因为我在两端都有.NET,在两端都加载了相同的"合约" dll等。但是随后,我不得不处理很多细节,例如" KnownType"属性。 在更改大量配置之前,WCF还默认只允许1个或2个客户端连接到服务。从代码中更改配置并不容易,运送大量的comfig文件不是一种选择,因为将我们的更改合并到客户在升级时可能已进行的更改中太难了(同样,我们不希望客户使用WCF设置!) .NET远程处理通常在大多数时间都有效。 我认为尝试假装.NET到.NET基于对象的通信与将Text(xml)发送到未知系统相同,这是一个太远的步骤。 (有几次我们使用WCF与Java系统进行通信,我们发现Java系统发出的XSD始终与它想要的XML不匹配,因此必须手动编码许多XML映射。) WCF不应被视为ASMX的替代品。从它的位置和如何在Microsoft内部使用来看,它实际上是用于任何类型的跨边界通信的基本体系结构。 |