混淆WCF通道(Confusion about WCF Channels)

2019-08-17 07:28发布

我感到困惑的代理与渠道。 根据我的阅读,WCF客户端使用其通过信道的链传递消息的代理。 每个信道负责某些任务,例如,一个信道被编码信息和另一信道是将其加密。

当我看到下面的代码我开始困惑

  • proxy.MyMethod()被调用,它实际上是所谓渠道的全产业链?

  • 笔者使用的方法称为CreateChannel并命名为标识代理。 因此,在WCF架构代理只是一个空间高水平的通道,这是不是一个独立的建筑元素?

     Binding binding = new NetTcpBinding(); EndpointAddress address = new EndpointAddress("net.tcp://localhost:8000"); IMyContract proxy = ChannelFactory<IMyContract>.CreateChannel(binding,address); using(proxy as IDisposable) { proxy.MyMethod(); } 

Answer 1:

是的,我想你准确地描述了这一点。 WCF有“道”,其开发人员倾向于在web.config配置和不在身边编写C#代码的概念。

这些都在说明信道模型概述 。

当你调用ChannelFactory.CreateChannel(binding,address); 框架看你的配置,并创建所有这些渠道给你作为一个对象。 所以,是的,代理就像是渠道的堆栈。

从您的最终你与它交互作为一个对象。 该框架有独立通道的实施交易。 它仍然是很好的理解你正在经历这些层,这样就可以正确地配置它们。



Answer 2:

在WCF中你有3个主要组成部分 - 合同,ADRESS和绑定。 的信道是一个管,其根据这三个部分构建。

信道的目的是修改消息转换格式,即理解为既 - 客户端和服务器,并组织它的正确输送。 传输和协议信道被用于此目的。 为了使这个过程变得更容易,我们使用绑定。 每个结合由元件,其表示信道堆叠一些信道的。

因此,每次当你打电话给你的方法时,它形成根据你的DataContract消息,并将其传递throught渠道的全产业链。 每个通道修改您的消息。 该prosses看起来是这样的

一个WCF代理实际上只是一个抽象的水平。 这是一个进程代表性的工艺外的一个服务。 你可以把它想象为一个对象,生成并根据自己的绑定元素和您的dataContract,它允许客户端和服务器端相互理解正确配置。



Answer 3:

在这种情况下,“代理”是对设计模式的参考。 维基百科 :

代理,在其最一般的形式,是一类功能为别的东西的接口。 代理可以接口到任何东西:一个网络连接,内存大对象,文件,或其他一些资源是昂贵或不可能复制。

在WCF的情况下的ChannelFactory <>。CreateChannel是创建一个通道堆栈基于配置。 每个信道提供了一个抽象到它下面的信道。 为实例的简化信道堆叠可能是:

  • 通道1序列化.NET对象到SOAP消息中
  • 通道2增加了安全信息提供给消息
  • 通道3编码该消息通过TCP发送。

我想你明白了这一切。

回到使用“代理”的:在堆叠中的任何信道是用于在它下面的信道的代理。 也就是说没有通道是最终的目的地。 所有通道都是“到别的接口”。 然而,随着你向下移动通道堆栈的不同的信道提供不同的接口/抽象(.NET对象,SOAP消息等)给调用者。

这再次讨论旨在回答这个问题,故意简化。

当你写客户端代码,这是最有用的接口是理解.NET对象之一。 认识到这一点的的ChannelFactory返回的那个有你的服务合同相匹配的.NET接口的堆栈的顶部的通道。 这将是有效的创建SOAP消息作为字符串,走在通道堆栈(或创建一个自定义堆栈),发现接受原始SOAP消息的渠道,标签是“代理”,并直接调用它。

笔者使用的方法称为CreateChannel并命名为标识代理。 因此,在WCF架构代理仅仅是一个特殊的高级别渠道,这是不是一个独立的建筑元素?

渠道是实现代理设计模式的建筑元素。 所有通道都是代理。 当你写客户端代码,顶层通道恰好是最有用的,因为它接受.NET业务合同。



文章来源: Confusion about WCF Channels