WCF是提高标准还是提高复杂性级别?[关闭]


84

我了解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学习参考资料?


3
如果您正在寻找WCF服务的良好测试客户端。那没有比msdn.microsoft.com/en-us/library/bb552364.aspx
Strelok

Answers:


61

好的,我们开始。首先,Michele Leroux Bustamante的书已针对VS2008更新。该书的网站没有消失。现在就开始了,它有大量的WCF信息。在该网站上,她为书中的所有示例提供了与VS2008兼容的更新代码。如果您从亚马逊订购,则将获得更新的重印本。

WCF不仅是ASMX的替代品。当然,它可以(并且做得很好)代替ASMX,但是真正的好处是它可以使您的服务成为自托管的。WSE的大多数功能从一开始就已经具备。该框架是高度可配置的,并且通过多种协议为多个端点提供服务的能力非常出色,IMO。

尽管您仍然可以通过“添加服务引用”选项生成代理类,但这不是必需的。您真正要做的就是复制ServiceContract接口,并告诉代码在哪里可以找到服务的端点,仅此而已。您可以使用很少的代码从服务中调用方法。使用此方法,您可以完全控制实现。无论选择哪种方法生成代理类,Michele都会在其关于该主题的一系列出色网络广播中同时显示和使用这两种方法。

Michele那里有很多优质的资料,我建议您访问她的网站。在学习WCF时,以下一些链接对我非常有用。我希望您能认识到WCF到底有多强大,以及实现起来多么容易。学习曲线有些陡峭,但是您的时间投入所带来的回报是值得的:

我建议您至少观看Michele的网络广播之一。她是一位非常有效的演示者,在WCF方面,她显然学识渊博。她从根本上揭开了WCF的内部运作神秘面纱。


3
巨大的资源。我不会说rp在抨击WCF或作者。在ASMX中花了很多时间之后,尝试看WCF时,我也感到有些不知所措。我知道它会更好,并且我想体验一下,但是很难像ASMX一样找到一个切入点。
克里斯·斯图尔特

15

感谢您的链接。只是好奇,你知道佛教发生了什么吗?他似乎已经消失了。他在blogs.thinktecture.com/buddhike上提到的新博客不存在(不再存在)。就像他把这个致命的线圈洗掉了一样。(什么梦想会来?)谢谢。
Jim Raden


14

我很难确定何时应该使用WCF。为什么?因为我将生产力和简单性放在了首位。为什么ASMX模型如此成功,因为它可以工作,而且您可以快速工作。在VS 2005和.NET 2.0中,wsdl.exe吐出了非常不错且合规的服务。

在现实生活中,您的体系结构中应该只有很少的通信协议。这使其易于维护。如果您需要使用旧系统,请为它们编写特定的适配器,以便它们可以在漂亮而又漂亮的SOA世界中使用。


WCF旨在成为所有这些协议的单一框架。它执行SOAP,REST,并且使用WSCF Adapter SDK,也执行那些“旧式系统”连接,所有这些都在WCF模型内。
Cheeso

3
这取决于您如何测量“生产率”。我希望开发人员现在花2到3天的时间来解决这个问题,因为这样做可以在6个月的时间内带来好处。WCF取代的不仅仅是Web服务。
Christian Payne 2009年

1
我同意100%。如果您只想使用Web服务,而又需要快速发货(谁没有呢?),那么它的ASMX一直都是宝贝!WCF是一把巨大的大锤,如果您只想要基本的Web服务,那绝对是个大杀手。仅仅因为它闪亮的新事物并不意味着您应该始终在所有情况下都更好地假设它。仅仅因为WCF难以理解,并不能使您成为明智的选择。有胆量的人有更多的权力拒绝跳上WCF潮流!
Saille 2010年

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对我来说更易于管理大有帮助。


如果许多开发人员打算从其目前运行良好的ASMX服务中进行切换,则AspNetCompatibilityRequirements必不可少。
戴夫·沃德2009年

@dan为什么没有AspNetCompatibilityRequirements
PreguntonCojoneroCabrón

@DaveWard AspNetCompatibilityRequirements是否必不可少
PreguntonCojoneroCabrón

4

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

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

我将承认,WCF确实还有其他问题(例如,通过basicHTTP公开服务时重写方法签名-参见此处,但总的来说,我认为这是绝对的改进)


3

如果您使用VS2008并创建WCF项目,则在单击运行/调试时会自动获得测试工具,并且可以添加引用,而不必使用svcutil。


2

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

  1. 使用泛型对自己的代理/客户端层进行编程(请参见类ClientBase,Binding)。我发现这很容易上手,但是很难完善。
  2. 使用1的第三方实现(SoftwareIsHardwork是我当前的最爱)

2

WCF替代了Microsoft的所有早期Web服务技术。它的功能还远远超过了传统上所谓的“ Web服务”。

WCF“ Web服务”是通过WCF启用的更广泛的远程通信范围的一部分。与通过传统的ASMX相比,在WCF中处理服务器的灵活性和可移植性要高得多,因为WCF从头开始设计是用来总结Microsoft提供的所有不同的分布式编程基础结构。WCF中的端点可以通过SOAP / XML进行通信,就像通过TCP / binary进行通信一样容易,而更改此媒体只是一个配置文件mod。从理论上讲,这减少了在移植或更改业务需求,目标等时所需的新代码量。

ASMX is older than WCF, and anything ASMX can do so can WCF (and more)。基本上,您可以看到WCF试图在逻辑上将所有不同的方式组合在一起,以使两个应用程序在Microsoft领域进行通信。ASMX只是众多方式中的一种,因此现在被归类为WCF的功能范围。

Web服务只能通过HTTP进行访问,并且可以在无状态环境中使用,因为WCF可以在不同类型的应用程序中托管,因此WCF十分灵活。托管WCF服务的常见方案是IIS,WAS,自托管,托管Windows服务。

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

在什么情况下必须使用WCF

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

WCF的功能

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

来源:主要文字来源


现在,使用WCF还是REST?还是WebAPI?还是MicroService?
PreguntonCojoneroCabrón

1

MSDN?我通常对Library引用本身做得很好,而且通常希望在那里找到有价值的文章。


1

就其提供的功能而言,我认为答案是兼容性。ASMX服务非常Microsofty。并不是说他们没有尝试与其他消费者兼容。但是除了ASP.NET网页和其他一些自定义的Microsoft使用者之外,该模型的适用性并不高。而WCF由于其体系结构,使您的服务除了具有普通的SOAP之外,还具有基于开放标准的端点,例如REST,JSON等。与ASMX相比,其他人使用WCF服务的时间可能要容易得多。

(这基本上是从MSDN比较阅读中得出的,因此,了解更多的人应该随时纠正我。)


我对跨平台的ASMX服务没有问题-XML在那里做得很好。我了解WCF =远程处理+ ASMX + MSMQ + WSE。我的主旨是MS应该使用一点“渐进增强”功能,使WCF更容易接近,而我的问题是!谢谢,rp
rp。

ASMX的互操作性非常好,尽管在涉及WS-Security时付出了更多的努力。
Cheeso

1

WCF不应被视为ASMX的替代品。从它的位置和如何在Microsoft内部使用来看,它实际上是用于任何类型的跨边界通信的基本体系结构。


是的。作为基本的通信框架,它应该替代ASMX和面向ASP.NET的Web服务。没有?
Cheeso

1

我相信WCF确实在许多方面促进了ASMX Web服务的实现。首先,它提供了一个非常好的分层对象模型,有助于隐藏分布式应用程序的内在复杂性。其次,您不仅可以使用请求-重放消息传递模式,包括从服务器到客户端的异步通知(纯HTTP不可能),其次,可以从XML消息传递中抽象出底层的传输协议,从而优雅地支持HTTP,HTTPS,TCP等。与“第一代” Web服务的向后兼容性也是一个加号。WCF使用XML标准作为内部表示格式。这可能被看作是优点还是缺点,尤其是随着诸如JSON之类的“ XML的无脂肪替代品”的日益普及。


1

我发现使用WCF的困难之处在于管理客户端和服务器的配置,以及对不太好的故障状态异常进行故障排除。

如果有人有任何快捷方式或提示,那就太好了。


1

我发现这很痛苦;因为我在两端都有.NET,在两端都加载了相同的“合约” dll等。但是随后,我不得不搞弄很多细节,例如“ KnownType”属性。

在更改大量配置之前,WCF还默认只允许1个或2个客户端连接到服务。从代码中更改配置并不容易,运送大量comfig文件不是一种选择,因为将我们的更改合并到客户在升级时可能已进行的更改中太难了(同样,我们也不希望客户使用WCF设置!)

.NET远程处理通常在大多数时间都有效。

我想假装.NET到.NET基于对象的通信与将Text(xml)发送到未知系统相同,这是一个很大的步骤。

(有几次我们使用WCF与Java系统进行通信,我们发现Java系统发出的XSD无论如何都与它想要的XML不匹配,因此必须手工编码许多XML映射。)


我认为人们说WCF可以替代远程处理时,有些不对劲。当您想进行真正的.Net到.Net基于对象的调用,并且对两端的设置方式有很多控制时,远程处理仍然是一个不错的选择。另一方面,WCF致力于发布服务,以供任何人以任何方式使用。
Tim Lovell-Smith 2010年

@ Tim,Microsoft现在说对所有内容都使用WCF,这是Remoting的替代品。远程处理似乎是.net世界中被遗弃的孩子。
伊恩·林罗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.