2010-01-06 53 views
10

ChannelFactory具有State属性意味着什么?我了解创建的频道可以具有基于连接的状态。但是我们对ChannelFactory为什么也有这种连接状态感到困惑。它是否也连接到WCF服务?WCF ChannelFactory State Property

+0

我认为这是一个很好的问题,我也很好奇。惊讶的没人有刺。 – Xiaofu 2010-03-20 12:56:42

回答

0

我认为这很有趣,我不知道答案,但我猜测ChannelFactory可能会保持资源可用,以防其他通道实例使用同一资源(同时或不久的将来) 。

例如,如果您使用具有使用TcpChannel作为传输通道的通道堆栈的通道工厂,则TCP连接可能由ChannelFactory管理,因为多个通道可能会重新使用相同的TCP连接,这样可以节省关于拆除/重新启动连接的性能开销。

因此,当您关闭频道时,频道会通知频道工厂不再需要资源,频道工厂随后可以释放资源并在其适合时(即超时?)释放资源。

如果没有其他人提供良好的答案,我可以检查这是否是这种情况。

9

A ChannelFactory对象具有State,因为它是CommunicationObject,WCF中的所有CommunicationObjects都有State。当然,这只是乞讨的问题,并没有真正的帮助。

真正的问题归结为两个部分

  1. 为什么没有ChannelFactoryCommunicationObject
  2. 得到什么没有了State实际上意味着什么?

第二个更容易回答,所以我们从那里开始。 ChannelFactory的State决定它是否可用于创建新的客户端通道,,不管这些客户端通道是否仍可使用。

与WCF中的所有CommunicationObjects一样,State也决定了您可以对该对象执行的操作。渠道工厂确实只有一个操作:CreateChannel。如果工厂为Open,则可以创建通道;如果是ClosedFaulted,则不能。具体(内部)渠道工厂实施(如HttpChannelFactory)在清理任何内部资源时都是Close()'d;这包括释放出于安全目的创建的资源,释放手柄命名管道等

此外,当你Close()通道工厂,它遍历所有通道,并呼吁他们每个人Close(),前过渡进入Closed状态本身。 (似乎有一些常见的实用程序代码(创建HTTP请求等),渠道工厂代表其渠道执行代码,以便渠道工厂关闭后渠道不再可用。这就是为什么渠道同时强迫关闭。)

对于所有的血淋淋的细节,去下载WCF Reference Source,但要准备好失去一天左右:)

更大的问题,那么,这就是为什么一个ChannelFactoryCommunicationObject呢?在这里,我正在进行猜测,因为据我所见,工厂对象自己从来没有实际上沟通到远程系统。但是,他们在创建通道之前会执行很多绑定参数的设置和验证,这需要分配与实际网络连接相同类型的资源。例如,命名管道渠道工厂为其渠道创建和管理连接池; HTTP和HTTPS通道工厂验证身份信息和身份验证值。我的猜测是渠道工厂做了一次设置工作,所以渠道可以跳过它; CommunicationObject模式简单地提供了一种便捷的方式来管理频道工厂的生命周期,因为WCF中的其他一切都是以这种方式进行管理的。

+0

我怀疑所有渠道都通过渠道工厂。可以将其视为一种轻量级模式端点和绑定配置,以及连接状态。从技术上讲,'ChannelFactory'将是负责连接的对象。渠道只是公开合同。 – Gusdor 2015-11-28 09:21:13

相关问题