我理解WCF提供的三部分服务/主机/客户端模型的价值。但是它只是我还是看起来像WCF采取了一些非常直接和直接的东西(ASMX模型)并且弄得一团糟?
是否有替代方法可以及时使用SvcUtil的命令行来生成代理?通过ASMX服务,自动提供测试工具; WCF今天有一个很好的选择吗?
我很欣赏WS *的东西与WCF更紧密地集成,并希望在那里找到WCF的一些回报,但是geeze,否则我很困惑。
此外,WCF可用的书籍状态充其量也很糟糕。 Juval Lowy,一位出色的作者,写了一本很好的O'Reilly参考书“编程WCF服务”,但是现在学习使用WCF并没有那么多(对我而言)。 Michele Leroux Bustamante的学习WCF是该书的前身(并且组织得更好,但并不多,作为教程)。它有很好的位置,但已经过时,相应的网站已经消失。
除了向Google推出bejebus外,你有没有很好的WCF学习参考?
答案 0 :(得分:61)
好的,我们走了。首先,Michele Leroux Bustamante的书已经针对VS2008进行了更新。这本书的网站没有消失。它现在正在运行,它有很多很棒的WCF信息。在该网站上,她为本书中的所有示例提供了与VS2008兼容的更新代码。如果您从亚马逊订购,您将获得更新的重印。
WCF不仅 是ASMX的替代品。当然它可以(而且相当不错)取代ASMX,但真正的好处是它允许您的服务自我托管。 WSE的大部分功能从一开始就已经完成。该框架高度可配置,并且通过多种协议为多个端点提供服务的能力令人惊叹,IMO。
虽然您仍然可以从“添加服务引用”选项生成代理类,但这不是必需的。您真正需要做的就是复制ServiceContract接口并告诉您的代码在哪里找到服务的端点,就是这样。您可以使用非常少的代码从服务中调用方法。使用此方法,您可以完全控制实现。无论您选择哪种方法来生成代理类,Michele都会在她的优秀系列网络广播中同时展示并同时使用这两种方法。
米歇尔有很多很棒的材料,我建议你查看她的网站。在我学习WCF时,这里有一些对我非常有帮助的链接。我希望你能够意识到WCF到底有多强大,以及实施起来有多容易。学习曲线有点陡峭,但您投入时间的回报非常值得:
我建议您至少观看Michele的一次网络广播。她是一位非常有效的主持人,当涉及到WCF时,她显然非常了解。她从根本上揭开了WCF的内部运作的神秘面纱。
答案 1 :(得分:15)
我通常使用Google查找我的WCF答案,并且通常会在以下博客中找到自己:
包含有价值的WCF文章的博客
我发现的其他有价值的文章
答案 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的初步想法完全一样!以下是一些解决方案:
答案 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的场景
WCF的功能
答案 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映射。)