84

我了解 WCF 提供的三部分服务/主机/客户端模型的价值。但它只是我还是看起来像 WCF 采取了一些非常直接和直接的东西(ASMX 模型)并把它弄得一团糟?

是否有替代使用 SvcUtil 的命令行回退来生成代理的替代方法?使用 ASMX 服务会自动提供测试工具;今天有 WCF 的好选择吗?

我很欣赏 WS* 的东西与 WCF 更紧密地集成在一起,并希望在那里为 WCF 找到一些回报,但是哎呀,否则我很困惑。

此外,可用于 WCF 的书籍的状态充其量也很糟糕。Juval Lowy 是一位出色的作者,他写了一本很好的 O'Reilly 参考书“Programming WCF Services”,但它对于现在学习使用 WCF 并没有多大作用(无论如何对我来说)。这本书的前身(作为教程组织得更好,但不多)是 Michele Leroux Bustamante 的 Learning WCF。它有很好的地方,但已经过时了,相应的网站也不见了。

除了继续用谷歌搜索bejebus之外,你还有很好的WCF学习参考吗?

4

16 回答 16

61

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

WCF不仅是 ASMX 的替代品。当然它可以(并且做得很好)取代 ASMX,但真正的好处是它允许您的服务是自托管的。WSE 的大部分功能从一开始就已经融入其中。该框架是高度可配置的,并且通过多种协议为多个端点提供服务的能力令人惊叹,IMO。

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

Michele 有很多很棒的材料,我建议你查看她的网站。在我学习 WCF 时,这里有一些对我非常有帮助的链接。我希望您会意识到 WCF 的真正强大之处,以及实现它的难易程度。学习曲线有点陡峭,但你的时间投资回报是值得的:

我建议您至少观看 1 个 Michele 的网络广播。她是一位非常有效率的演讲者,而且她在 WCF 方面的知识显然令人难以置信。她在从头开始揭开 WCF 内部运作的神秘面纱方面做得很好。

于 2009-05-18T13:04:09.460 回答
15

我通常使用 Google 来查找我的 WCF 答案,并且通常会在以下博客上找到自己:

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

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

于 2008-12-10T22:53:00.290 回答
14

我很难确定何时应该或将使用 WCF。为什么?因为我把生产力和简单性放在我的清单上。为什么 ASMX 模型如此成功,因为它有效,而且您可以让它快速运作。在 VS 2005 和 .NET 2.0 中,wsdl.exe 提供了相当不错且合规的服务。

在现实生活中,您的架构中应该只有很少的通信协议。这使它保持简单和可维护。如果您需要访问遗留系统,请为它们编写特定的适配器,这样它们就可以在光鲜亮丽的 SOA 世界中发挥作用。

于 2008-12-08T16:14:52.203 回答
13

WCF 比 ASMX 强大得多,它以多种方式对其进行了扩展。ASMX 仅限于 HTTP,而 WCF 可以使用多种协议进行通信(当然,HTTP 仍然是大多数人使用它的方式,至少对于需要互操作的服务而言)。WCF 也更容易扩展。至少,可以以 ASMX 无法扩展的方式对其进行扩展。“容易”可能会拉伸它。=)

在我看来,WCF 提供的附加功能远远超过了它所增加的复杂性。我也觉得编程模型更容易。例如,DataContracts 比必须使用带有公共属性的 XML 序列化来进行序列化要好得多。它在本质上也更具声明性,这也很好。

于 2008-09-26T10:29:06.950 回答
6

等等......你有没有使用过.NET Remoting,因为那是它所取代的真实东西。.NET Remoting 本身就相当复杂。我发现 WCF 更容易且布局更好。

于 2008-09-08T17:13:37.297 回答
4

我没有看到它经常被提及,但是您仍然可以使用 WCF 实现相当简单的服务,非常类似于 ASMX 服务。例如:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SimpleService
{
    [OperationContract]
    public string HelloWorld()
    {
        return "Hello World";
    }

}

您仍然需要在 web.config 中注册端点,但这还不错。

消除分离的数据、服务和操作合同的冗长对于使 WCF 对我来说更易于管理大有帮助。

于 2008-09-08T16:53:10.713 回答
4

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

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

我承认我在 WCF 方面确实存在其他问题(例如,在通过 basicHTTP 公开服务时重写方法签名 - 请参见此处,但总体而言,我认为这是一个明确的改进

于 2008-09-26T10:45:59.000 回答
3

如果您使用的是 VS2008 并创建了一个 WCF 项目,那么当您点击运行/调试时,您会自动获得一个测试工具,并且您可以添加引用而无需使用 svcutil。

于 2008-09-26T10:33:11.327 回答
2

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

  1. 利用泛型编写您自己的代理/客户端层(请参阅类ClientBase和 Binding)。我发现这很容易上手,但很难完美。
  2. 使用 1 的第三方实现(SoftwareIsHardwork是我目前最喜欢的)
于 2008-12-10T23:10:53.313 回答
2

WCF是Microsoft早期所有Web 服务技术的替代品。它还比传统上认为的“Web 服务”做得更多。

WCF“Web 服务”是通过 WCF 实现的更广泛的远程通信的一部分。您将在 WCF 中获得比通过传统 ASMX 更高程度的灵活性和可移植性,因为 WCF 从头开始​​设计,总结了 Microsoft 提供的所有不同的分布式编程基础结构。WCF 中的端点可以通过 SOAP/XML 与通过 TCP/二进制文件一样容易地进行通信,并且更改此介质只需一个配置文件 mod。理论上,这减少了移植或更改业务需求、目标等时所需的新代码量。

ASMX is older than WCF, and anything ASMX can do so can WCF (and more). 基本上,您可以将 WCF 视为试图将在 Microsoft 世界中让两个应用程序进行通信的所有不同方式逻辑地组合在一起;ASMX 只是众多方式中的一种,因此现在归入 WCF 功能的保护伞下。

Web 服务只能通过 HTTP 访问,它可以在无状态环境中工作,WCF 是灵活的,因为它的服务可以托管在不同类型的应用程序中。托管 WCF 服务的常见方案是 IIS、WAS、自托管、托管 Windows 服务。

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

什么情况下必须使用WCF

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

WCF的特点

  • 服务导向
  • 互操作性
  • 多种消息模式
  • 服务元数据
  • 数据合同
  • 安全
  • 多种传输和编码
  • 可靠和排队的消息
  • 持久消息
  • 交易
  • AJAX 和 REST 支持
  • 可扩展性

来源:主要文本来源

于 2014-05-05T21:25:30.697 回答
1

微软?我通常对图书馆参考本身做得很好,我通常希望在那里找到有价值的文章。

于 2008-09-08T16:45:47.050 回答
1

就它提供的功能而言,我认为答案是兼容性。ASMX 服务非常微软化。并不是说他们没有尝试与其他消费者兼容;但除了 ASP.NET 网页和其他一些自定义 Microsoft 消费者之外,该模型并不能很好地适应。而 WCF,由于其体系结构,允许您的服务在通常的 SOAP 之外具有非常开放的基于标准的端点,例如 REST、JSON 等。其他人使用 WCF 服务可能比使用 ASMX 服务更容易。

(这基本上都是从比较MSDN阅读中推断出来的,所以知道更多的人应该随时纠正我。)

于 2008-09-08T17:11:03.637 回答
1

不应将 WCF 视为 ASMX 的替代品。从它的定位以及它在微软内部的使用方式来看,它确实是一个基础架构,可用于任何类型的跨界通信。

于 2008-12-08T19:52:13.260 回答
1

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

于 2008-12-08T20:13:12.080 回答
1

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

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

于 2008-12-31T20:16:11.793 回答
1

我觉得那很痛苦;因为我在两端都有.NET,在两端都加载了相同的“合同”dll,等等。但是我不得不处理很多细节,比如“KnownType”属性。

WCF 还默认只允许 1 或 2 个客户端连接到服务,直到您更改大量配置。从代码更改配置并不容易,不能选择发送大量配置文件,因为很难将我们的更改合并到客户在升级时可能所做的任何更改中(我们也不希望客户玩 WCF 设置!)

.NET 远程处理在大多数情况下都可以正常工作。

我认为试图假装.NET 到 .NET 基于对象的通信与将文本 (xml) 的位发送到未知系统相同,这太过分了。

(有几次我们使用 WCF 与 Java 系统对话,我们发现 Java 系统给出的 XSD 与它想要的 XML 不匹配,因此不得不手动编写很多 XML 映射。)

于 2010-03-11T09:09:00.640 回答