ChannelFactory具有State属性意味着什么?我了解创建的频道可以具有基于连接的状态。但是我们对ChannelFactory为什么也有这种连接状态感到困惑。它是否也连接到WCF服务?WCF ChannelFactory State Property
回答
我认为这很有趣,我不知道答案,但我猜测ChannelFactory可能会保持资源可用,以防其他通道实例使用同一资源(同时或不久的将来) 。
例如,如果您使用具有使用TcpChannel作为传输通道的通道堆栈的通道工厂,则TCP连接可能由ChannelFactory管理,因为多个通道可能会重新使用相同的TCP连接,这样可以节省关于拆除/重新启动连接的性能开销。
因此,当您关闭频道时,频道会通知频道工厂不再需要资源,频道工厂随后可以释放资源并在其适合时(即超时?)释放资源。
如果没有其他人提供良好的答案,我可以检查这是否是这种情况。
A ChannelFactory
对象具有State
,因为它是CommunicationObject
,WCF中的所有CommunicationObjects
都有State
。当然,这只是乞讨的问题,并没有真正的帮助。
真正的问题归结为两个部分
- 为什么没有
ChannelFactory
从CommunicationObject
- 得到什么没有了
State
实际上意味着什么?
第二个更容易回答,所以我们从那里开始。 ChannelFactory的State
决定它是否可用于创建新的客户端通道,和,不管这些客户端通道是否仍可使用。
与WCF中的所有CommunicationObjects
一样,State
也决定了您可以对该对象执行的操作。渠道工厂确实只有一个操作:CreateChannel
。如果工厂为Open
,则可以创建通道;如果是Closed
或Faulted
,则不能。具体(内部)渠道工厂实施(如HttpChannelFactory
)在清理任何内部资源时都是Close()
'd;这包括释放出于安全目的创建的资源,释放手柄命名管道等
此外,当你Close()
通道工厂,它遍历所有通道,并呼吁他们每个人Close()
,前过渡进入Closed
状态本身。 (似乎有一些常见的实用程序代码(创建HTTP请求等),渠道工厂代表其渠道执行代码,以便渠道工厂关闭后渠道不再可用。这就是为什么渠道同时强迫关闭。)
对于所有的血淋淋的细节,去下载WCF Reference Source,但要准备好失去一天左右:)
更大的问题,那么,这就是为什么一个ChannelFactory
是CommunicationObject
呢?在这里,我正在进行猜测,因为据我所见,工厂对象自己从来没有实际上沟通到远程系统。但是,他们在创建通道之前会执行很多绑定参数的设置和验证,这需要分配与实际网络连接相同类型的资源。例如,命名管道渠道工厂为其渠道创建和管理连接池; HTTP和HTTPS通道工厂验证身份信息和身份验证值。我的猜测是渠道工厂做了一次设置工作,所以渠道可以跳过它; CommunicationObject
模式简单地提供了一种便捷的方式来管理频道工厂的生命周期,因为WCF中的其他一切都是以这种方式进行管理的。
我怀疑所有渠道都通过渠道工厂。可以将其视为一种轻量级模式端点和绑定配置,以及连接状态。从技术上讲,'ChannelFactory'将是负责连接的对象。渠道只是公开合同。 – Gusdor 2015-11-28 09:21:13
- 1. WCF ChannelFactory IDuplexSessionChannel
- 2. WCF的ChannelFactory和OperationBehavior
- 3. 手动WCF和ChannelFactory
- 4. WCF的ChannelFactory缓存
- 5. WCF-NetNamedPipe的的ChannelFactory
- 6. WCF ChannelFactory异步调用
- 7. WCF ChannelFactory vs生成代理
- 8. WCF Channel和ChannelFactory缓存
- 9. C#WCF ChannelFactory BadRequest 400错误
- 10. WCF/WPF最佳实践 - WCF ChannelFactory和PRISM
- 11. WCF:不关闭ChannelFactory与不断重新创建ChannelFactory并关闭ChannelFactory的比较
- 12. 与ChannelFactory和CreateChannel的异步WCF调用
- 13. App.config之外的WCF ChannelFactory配置?
- 14. 内存泄漏 - Ninject,WCF,WEBApi,ChannelFactory
- 15. 如何将证书添加到WCF ChannelFactory?
- 16. 由ChannelFactory引发的WCF异常
- 17. WCF ChannelFactory和连接超时的最佳做法
- 18. WCF ChannelFactory不能准确报告故障状态?
- 19. java.lang.NoClassDefFoundError:org/jboss/netty/channel/ChannelFactory
- 20. WCF - 是否有可能侦听与HttpListener或套接字的WCF ChannelFactory
- 21. 如何在使用spring.net wcf创建服务时调用WCF service.Abort():channelfactory
- 22. ChannelFactory <T> without interface
- 23. 如何自ChannelFactory
- 24. 如何使用Silverlight实现ChannelFactory和WCF程序集共享?
- 25. 由ChannelFactory生成的WCF对象生命周期
- 26. 使用ChannelFactory调用wcf服务的好处是什么
- 27. 如何从ChannelFactory(WCF)更改频道的地址
- 28. 通过channelfactory调用WCF webservice时出错 - 未经许可
- 29. 使用ChannelFactory调用不带服务引用的异步WCF
- 30. 具有自定义端点行为的WCF ChannelFactory(Json-Rpc)
我认为这是一个很好的问题,我也很好奇。惊讶的没人有刺。 – Xiaofu 2010-03-20 12:56:42