首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF ChannelFactory状态属性

WCF ChannelFactory状态属性
EN

Stack Overflow用户
提问于 2010-01-06 15:26:33
回答 2查看 4.7K关注 0票数 10

ChannelFactory拥有状态属性意味着什么?我知道创建的通道可以有基于连接的状态。但是我搞不懂为什么ChannelFactory也有这样的连接状态。它是否也连接到WCF服务?

EN

回答 2

Stack Overflow用户

发布于 2012-03-14 23:41:49

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

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

  1. Why是否从
  2. What中派生出ChannelFactoryCommunicationObject State的实际含义是?

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

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

此外,当您对通道工厂执行Close()操作时,它会遍历所有通道并在每个通道上调用Close(),然后再转换为Closed状态本身。(似乎有一些常用的实用程序代码(创建HTTP请求等)通道工厂代表它们的通道实现,这样一旦通道工厂关闭,通道就不能再起作用。这就是通道同时被强制关闭的原因。)

对于所有血淋淋的细节,请下载WCF Reference Source,但要准备好浪费一天左右的时间:)

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

票数 9
EN

Stack Overflow用户

发布于 2012-01-17 22:12:08

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

例如,如果将通道工厂与使用TcpChannel作为传输通道的通道堆栈一起使用,则ChannelFactory可能会管理TCP连接,因为多个通道可能会重用相同的TCP连接,从而节省了断开/重新模拟连接的性能开销。

因此,当您关闭通道时,通道通知通道工厂不再需要该资源,然后通道工厂可以在它认为合适的时候释放资源(即在超时之后?)。

如果没有其他人提供好的答案,我可以检查这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2011483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档