当前位置: 首页 > 编程语言 > C#

WCFChannelFactoryState属性分享

时间:2023-04-10 10:49:33 C#

WCFChannelFactoryState属性ChannelFactory有State属性是什么意思?我知道创建的通道可以具有基于连接的状态。但是我很困惑为什么ChannelFactory也有这样的连接状态。它是否也连接到WCF服务?ChannelFactory对象有State是因为它是CommunicationObject,而WCF中所有的CommunicationObjects都有State。当然,这只是提出问题,并没有真正的用处。真正的问题归结为两个部分为什么ChannelFactory派生自CommunicationObject以及它的State实际上意味着什么?第二个更容易回答,所以让我们从那里开始。ChannelFactory的状态决定了它是否可以用来创建新的客户端通道,以及这些客户端通道是否仍然可以使用。与WCF中的所有CommunicationObjects一样,State确定允许对对象执行哪些操作。通道工厂实际上只有一个操作:CreateChannel。如果工厂是开放的,你可以创建渠道;如果它是Closed或Faulted,则不能。具体(内部)通道工厂实现(例如,和HttpChannelFactory)在Close()ed时清理所有内部资源;这包括释放出于安全目的而创建的资源、释放命名管道的句柄等。此外,当您关闭()通道工厂时,它会遍历所有通道并在转换为关闭状态之前在每个通道上调用Close()。(通道工厂代表它们的通道实现了一些通用的实用程序代码(创建HTTP请求等),因此一旦通道工厂关闭,通道就无法再运行。这就是通道被迫同时关闭的原因。)对于所有血淋淋的细节,请下载WCF参考源,但要准备好浪费一天左右的时间:)那么更大的问题是,为什么ChannelFactory根本就是一个CommunicationObject?在这里,我猜测是因为据我所知,工厂对象本身从未真正与远程系统通信。但是,他们在创建通道之前对绑定参数进行了大量设置和验证,这需要分配与实际网络连接相同类型的资源。例如,命名管道通道工厂为其通道创建和管理连接池;HTTP和HTTPS通道工厂验证身份信息和身份验证值。我的猜测是通道工厂只做一次这个设置工作,所以通道可以跳过它;CommunicationObject模式只是提供了一种管理通道工厂生命周期的便捷方式,因为WCF中的其他一切都以这种方式管理。我认为这很有趣,我不知道答案,但我猜测ChannelFactory可能会保留资源以防其他通道实例使用相同的资源(同时或在不久的将来)。例如,如果您使用带有使用TcpChannel作为传输通道的通道堆栈的通道工厂,则可以通过ChannelFactory管理TCP连接,因为多个通道可能会重用相同的TCP连接,从而节省了拆除/拆除的性能开销重新启动连接。因此,当您关闭通道时,通道会通知通道工厂不再需要该资源,然后通道工厂可以在它认为合适时(即超时后)自由释放资源。如果没有其他人有好的答案,我可以检查一下。以上就是C#学习教程:WCFChannelFactoryState属性分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: