关于Web服务:WCF是提高标准还是提高复杂性级别?

关于Web服务:WCF是提高标准还是提高复杂性级别?

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)的网络广播:http://www.dasblonde.net/2007/06/24/WCFWebcastSeries.aspx
  • Michele的图书网站(针对VS2008进行了更新):http://www.thatindigogirl.com/

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


我通常使用Google查找WCF答案,并通常在以下博客中找到自己:

包含有价值的WCF文章的博客

  • http://blogs.msdn.com/drnick/default.aspx
  • http://blogs.msdn.com/wenlong/default.aspx
  • http://blogs.thinktecture.com/buddhike/
  • http://www.dasblonde.net/default.aspx

我发现的其他有价值的文章

  • http://blogs.conchango.com/pauloreichert/archive/2007/02/22/WCF-Reliable-Sessions-Puzzle.aspx
  • http://blogs.msdn.com/salvapatuel/archive/2007/04/25/why-using-is-bad-for-your-wcf-service-host.aspx

我很难确定何时应该使用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服务非常相似。例如:

1
2
3
4
5
6
7
8
9
10
11
[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公开服务时重写方法签名-请参阅此处,但总的来说我认为这是绝对的改进)


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


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的想法是完全一样的!以下是一些解决方案:

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

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


    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内部使用来看,它实际上是用于任何类型的跨边界通信的基本体系结构。


    推荐阅读

      linux服务端退出命令?

      linux服务端退出命令?,档案,命令,环境,异常,标准,网络,模式,终端,编辑,文件,l

      linux中启动服务命令?

      linux中启动服务命令?,服务,系统,命令,信息,工作,设备,网络,标准,名称,密码,l

      linux命令测试客户端?

      linux命令测试客户端?,地址,系统,网络,工具,工作,分析,环境,命令,下行,资料,l

      linux服务器常用命令?

      linux服务器常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,设备,功能,

      linux服务器保存命令?

      linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

      linux服务器扫盘命令?

      linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

      linux服务器搭建命令?

      linux服务器搭建命令?,系统,服务,软件,地址,平台,在线,密码,工具,环境,百度,l

      服务器重启命令linux?

      服务器重启命令linux?,工作,标准,设备,服务,系统,名称,命令,百度,网络,密码,

      linux服务端常用命令?

      linux服务端常用命令?,工作,地址,系统,网络,基础,命令,标准,工具,信息,管理,l

      linux禁用服务命令行?

      linux禁用服务命令行?,服务,系统,软件,管理,工具,信息,状态,平台,连续,技术,l

      linux停服务常用命令?

      linux停服务常用命令?,地址,工作,系统,命令,服务,信息,标准,管理,代码,进程,l

      linux服务器删除命令?

      linux服务器删除命令?,系统,服务,管理,情况,命令,工作,互动,地址,软件,较大,l

      linux开启服务命令?

      linux开启服务命令?,服务,标准,设备,工作,网络,系统,密码,命令,服务器,终端,

      linux服务器负荷命令?

      linux服务器负荷命令?,信息,电脑,中科,环境,工具,系统,平均,检测,情况,状态,l

      linux常见服务器命令?

      linux常见服务器命令?,信息,工作,标准,地址,设备,系统,情况,时间,状态,命令,

      linux服务器基础命令?

      linux服务器基础命令?,设备,标准,工作,地址,服务,系统,信息,情况,图片,基础,

      服务器linux命令大全?

      服务器linux命令大全?,标准,工作,设备,系统,服务,信息,时间,命令,服务器,级

      重启linux服务器命令?

      重启linux服务器命令?,标准,设备,工作,命令,网络,系统,提示,主机,服务器,接

      linux用命令启动服务?

      linux用命令启动服务?,服务,网络,密码,信息,系统,设备,地址,项目,状态,积极,l