关于WCF频道的困惑

Cos*_*sta 8 wcf channelfactory

我对代理和渠道感到困惑.根据我的阅读,WCF客户端使用代理通过一系列渠道传递消息.每个频道负责某项任务,例如,一个频道正在编码该消息,另一个频道正在对其进行加密.

当我看到以下代码时,我的困惑就开始了

  • 什么时候proxy.MyMethod()被调用,它实际上称为整个渠道链?

  • 作者使用了调用的方法CreateChannel并命名了标识符代理.那么在WCF架构中,Proxy只是一个空间高级通道,它不是一个独立的架构元素?

    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();  
    }  
    
    Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 11

在WCF中,您有3个主要组件 - 合同,地址和绑定.通道是管道,根据这三个部分构建.

在此输入图像描述

通道的目的是将消息修改为格式,这对于客户端和服务器都是可理解的,并且可以组织它正确的传输.传输和协议通道用于此目的.为了简化此过程,我们使用绑定.每个绑定由元素组成,这些元素表示通道堆栈中的某个通道.

因此,每当您调用方法时,它会根据您的DataContract形成消息,并将其传递到整个通道链中.每个频道都会修改您的消息.好处看起来像这样

在此输入图像描述

WCF代理实际上只是一个抽象层次.它是进程外服务的进程内代表.您可以将它想象为一个对象,根据您的绑定元素和dataContract生成并正确配置,这允许您的客户端和服务器端相互理解.


Buh*_*ica 3

是的,我认为你描述得很准确。WCF 有“通道”的概念,开发人员倾向于在 web.config 中配置它,而不是编写 C# 代码。

这些在通道模型概述中进行了描述。

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

从你的角度来看,你将它作为一个对象与之交互。该框架涉及单独渠道的实施。很高兴了解您正在经历这些层,以便您可以正确配置它们。