gpt4 book ai didi

c# - WCF ChannelFactory 状态属性

转载 作者:可可西里 更新时间:2023-11-01 09:09:41 24 4
gpt4 key购买 nike

ChannelFactory 拥有 State 属性意味着什么?我知道创建的 channel 可以具有基于连接的状态。但是我很困惑为什么 ChannelFactory 也有这样的连接状态。它也连接到 WCF 服务吗?

最佳答案

一个 ChannelFactory 对象有一个 State 因为它是一个 CommunicationObject,并且 WCF 中的所有 CommunicationObjects 都有一个状态。当然,这只是在回避问题,并没有真正的帮助。

真正的问题归结为两部分

  1. 为什么 ChannelFactory 派生自CommunicationObject
  2. State 的实际含义是什么

第二个更容易回答,所以让我们从这里开始。 ChannelFactory 的 State 决定了它是否可以用于创建新的客户端 channel ,以及这些客户端 channel 是否仍然可以使用。

与 WCF 中的所有 CommunicationObjects 一样,State 确定允许您对该对象执行的操作。 channel 工厂实际上只有一个操作:CreateChannel。如果工厂是Open,您可以创建 channel ;如果它是 ClosedFaulted,则不能。具体(内部) channel 工厂实现(例如,HttpChannelFactory)在Close() 时清理所有内部资源;这包括释放为安全目的而创建的资源、释放命名管道的句柄等。

此外,当您Close() channel 工厂时,它会遍历所有 channel 并在每个 channel 上调用Close(),然后再转换为Closed 状态本身。 (似乎有一些通用的实用程序代码(创建 HTTP 请求等)是 channel 工厂代表其 channel 实现的,这样一旦 channel 工厂关闭, channel 就无法再运行。这就是为什么 channel 是同时强制关闭。)

有关所有详细信息,请下载 WCF Reference Source , 但要准备好失去一天左右的时间:)

那么,更大的问题是为什么 ChannelFactoryCommunicationObject?在这里,我只是在猜测,因为据我所知,工厂对象本身从未实际上与远程系统通信。但是,在创建 channel 之前,它们确实会对其绑定(bind)参数执行大量设置和验证,这需要分配与实际网络连接相同类型的资源。例如,命名管道 channel 工厂为其 channel 创建和管理连接池; HTTP 和 HTTPS channel 工厂验证身份信息和身份验证值。我的猜测是 channel 工厂只做一次这个设置工作,所以 channel 可以跳过它; CommunicationObject 模式只是提供了一种方便的方式来管理 channel 工厂的生命周期,因为 WCF 中的其他一切都是以这种方式管理的。

关于c# - WCF ChannelFactory 状态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2011483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com