我理解WCF提供的三部分服务/主机/客户端模型的价值。但是它只是我还是看起来像WCF采取了一些非常直接和直接的东西(ASMX模型)并且弄得一团糟?
是否有替代使用SvcUtil的命令行回溯产生代理?通过ASMX服务,自动提供测试工具; WCF今天有一个很好的选择吗?
我很欣赏WS *的东西与WCF更紧密地集成,并希望在那里找到WCF的一些回报,但是geeze,否则我很困惑。
此外,WCF可用的书籍状况充其量也很糟糕。 Juval Lowy,一位出色的作者,写了一本很好的O'Reilly参考书“编程WCF服务”,但是现在学习使用WCF并没有那么多(对我而言)。 Michele Leroux Bustamante的学习WCF是该书的前身(并且组织得更好,但并不多,作为教程)。它有很好的位置,但已经过时,相应的网站已经消失。
你有没有很好的WCF学习参考,除了继续谷歌bejebus的东西?
好的,我们走了。首先,Michele Leroux Bustamante的书已经针对VS2008进行了更新。这本书的网站没有消失。它现在正在运行,它有很多很棒的WCF信息。在该网站上,她为本书中的所有示例提供了与VS2008兼容的更新代码。如果您从亚马逊订购,您将获得更新的重印。
WCF不仅是ASMX的替代品。当然它可以(而且相当不错)取代ASMX,但真正的好处是它允许您的服务自我托管。 WSE的大部分功能从一开始就已经完成。该框架具有高度可配置性,并且通过多种协议为多个端点提供服务的能力令人惊叹,IMO。
虽然您仍然可以从“添加服务引用”选项生成代理类,但这不是必需的。您真正需要做的就是复制ServiceContract接口并告诉您的代码在哪里找到服务的端点,就是这样。您可以使用非常少的代码从服务中调用方法。使用此方法,您可以完全控制实现。无论您选择生成代理类的方法如何,Michele都会在这个主题的优秀系列网络广播中展示并同时使用这两种方法。
米歇尔有很多很棒的材料,我建议你查看她的网站。在我学习WCF时,这里有一些对我非常有帮助的链接。我希望你能够意识到WCF到底有多强大,以及实施起来有多容易。学习曲线有点陡峭,但您投入时间的回报非常值得:
我建议你至少观看一次Michele的网络广播。她是一位非常有效的主持人,当谈到WCF时,她显然非常有见识。她从根本上揭开了WCF的内部运作的神秘面纱。
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
WCF的功能
MSDN?我通常对图书馆参考本身做得很好,我通常希望在那里找到有价值的文章。
就它提供的内容而言,我认为答案是兼容性。 ASMX服务非常漂亮。并不是说他们没有尝试与其他消费者兼容;但除了ASP.NET网页和其他一些自定义Microsoft消费者之外,该模型并不适合。而WCF由于其架构,允许您的服务具有非常开放的基于标准的端点,例如REST,JSON等除了通常的SOAP之外。其他人可能比ASMX服务更容易耗费您的WCF服务。
(这基本上都是从比较MSDN阅读中推断出来的,所以知道更多的人应该随时纠正我。)
不应将WCF视为ASMX的替代品。根据微软如何定位以及如何在内部使用它,它实际上是一个用于任何类型的跨境通信的基础架构。
我相信WCF在很多方面确实推动了ASMX Web服务的实施。首先,它提供了一个非常好的分层对象模型,有助于隐藏分布式应用程序的内在复杂性。其次,您可以拥有多个请求重播消息传递模式,包括从服务器到客户端的异步通知(不可能使用纯HTTP),第三,从XML消息传递中抽象出底层传输协议,从而优雅地支持HTTP,HTTPS,TCP等。向后兼容“第一代”Web服务也是一个优势。 WCF使用XML标准作为内部表示格式。这可能被视为优势或劣势,尤其是随着越来越流行的“无脂肪替代XML”(如JSON)。
我在WCF中遇到的困难是管理客户端和服务器的配置,以及对不那么好的故障状态异常进行故障排除。
如果有人有任何快捷方式或提示,那将是很好的。
我觉得这很痛苦;因为我在两端都有.NET,在两端加载相同的“契约”dll等等。但是后来我不得不搞砸了许多细节,比如“KnownType”属性。
WCF还默认只允许1或2个客户端连接到服务,直到您更改大量配置。从代码更改配置并不容易,因为很难将我们的更改合并到客户在升级时可能做出的任何更改(我们也不希望客户),因此无法提供大量的comfig文件。玩WCF设置!)
.NET远程处理在大多数情况下都倾向于工作。
我认为尝试假装.NET到基于.NET对象的通信与将Text(xml)的位发送到未知系统是相同的,这是一个太过分了。
(我们几次使用WCF与Java系统交谈,我们发现java系统提供的XSD与它想要的XML不匹配,所以不得不手工编写大量的XML映射。)
我通常使用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服务。例如:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
[OperationContract]
public string HelloWorld()
{
return "Hello World";
}
}
您仍然需要在web.config中注册终点,但这并不是那么糟糕。
消除分离的数据,服务和操作合同的冗长程度对于使我的WCF更易于管理有很大帮助。
VS2008包含“添加服务引用”上下文菜单项,它将在幕后为您创建代理。
如前所述,WCF不仅仅是作为ASMX Web服务类型的替代品,而是为所有可互操作的服务提供一致,安全和可扩展的方法,无论是通过HTTP,TCP,命名管道还是MSMQ传输。
我将承认我在WCF中遇到其他问题(例如,在通过basicHTTP公开服务时重写方法签名 - 请参阅here,但总的来说我认为这是一个明确的改进
如果您正在使用VS2008并创建一个WCF项目,那么当您点击运行/调试时,您将自动获得测试工具,并且您可以添加引用而无需使用svcutil。
我对WCF的初步想法完全一样!以下是一些解决方案: