【问题标题】:What are WCF Proxies and what are they good for?什么是 WCF 代理,它们有什么用?
【发布时间】:2011-09-11 06:31:37
【问题描述】:
我最近一直在自学 WCF,甚至使用 WCF 编写了一些生产服务。但直到最近,我才真正深入了解 WCF。
我知道“代理”设计模式的概念。我也知道在 ASMX Web 服务中使用代理。但是我很难理解 WCF 代理是什么以及它是如何使用的。我已经彻底查看了有关 WCF 的 MSDN 文档,但我仍然没有掌握将代理与 WCF 服务一起使用的大局。
【问题讨论】:
标签:
.net
web-services
wcf
proxy
webservices-client
【解决方案1】:
WCF 代理实际上只是一个抽象级别。您针对代理(最终是一个服务合同的接口)进行编码,而无需处理处理 WCF 通信逻辑的细粒度细节。 WCF 的好处是您可以使用同一个代理与服务(http、wshttp、msmq、命名管道等)进行多种类型的通信。
【解决方案2】:
【讨论】:
-
在 Wikipedia 上,另请参阅 Proxy pattern,其中说明了它的用途之一:“为远程资源提供接口,例如 Web 服务或 REST 资源。” ,我认为需要注意的是,代理可以提供序列化和反序列化服务。 (例如,对于 XML 和 JSON 消息有效负载。)
【解决方案3】:
从技术上讲,代理是 CLR 类,它公开单个 CLR 接口,代表
服务契约。代理提供与 ServiceContract 相同的操作,但还提供用于管理代理生命周期和服务连接的其他方法
or
Proxy 用于从客户端表示 Server 中的 ServiceContract 接口。通过使用代理,我们可以调用存在于 Server 中的 Interface 中的服务方法。
【解决方案4】:
需要客户端代理才能使用来自 .NET 客户端的 WCF 服务。
代理是客户端内存中的一个对象,它公开与 WCF 服务相同的接口或 API。您的消费代码将针对该代理进行调用,并且代理会将这些调用作为 SOAP 消息发送到 WCF 服务。
Visual Studio 可以根据 WCF 服务在 WSDL 或 WS-MetaDataExchange 端点(基于 SOAP)中公开的元数据生成代理代码。
如果您想更好地控制服务消耗,则可以手动编写代理代码。就像您想封装重复使用模式一样,例如设置凭据等。