- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试更好地了解 WCF 的一些内部工作原理。我已经做了相当多的环顾四周,但我无法找到关于 ChannelFactory.Open()
与 IClientChannel.Open()
相比的明确解释.开厂的目的是什么?如果 channel 是用来通信的,那么在 channel 创建和打开之后,工厂在这个过程中起到什么作用呢?
问题被问到here ,以及其他问题,但从未直接回答。
编辑:
在反编译源码后,我发现了一些需要在ChannelFactory上调用Open的具体原因,记录如下。
我仍然难以理解的是为什么这项工作是通过 ICommunicationObject 提供的机制完成的,而工厂实际上并没有与任何东西通信(据我所知)。为什么不在构造或处置对象时处理这些事情?
我想我可能已经了解得够多了,这样的答案可能不会公开。感谢那些参与原始问题的人。
最佳答案
Open 需要在工厂中调用,因为它是一个 ICommunicationObject - 在您使用其中一个之前,它需要被打开。但在大多数情况下,当您调用诸如 CreateChannel 之类的东西时,工厂会自动为您打开,因此您很少需要担心显式打开工厂。
关于关闭,它实际上取决于工厂使用的绑定(bind)。在大多数情况下,您是对的,资源主要与 channel 相关联。但是某个绑定(bind)可能会在同一个底层连接中多路复用多个 channel ,因此关闭 channel 只会从要多路复用的列表中删除该 channel 。只有当工厂关闭时,底层连接才真正被释放。
关于c# - ChannelFactory.Open VS IClientChannel.Open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11980263/
我刚刚花了 4 个小时(在英国是凌晨 3 点)尝试调试 ASP.NET 应用程序,该应用程序导致框架管理的线程(即不是我的线程)出现异常。我刚刚发现静态方法 ChannelFactory.Create
根据文档和文章,如果遇到意外的异常/故障,建议在客户端代理上调用 Abort()。请参阅以下内容(简化版): MyServiceClient proxy = null; try { proxy
考虑以下代码,它是许多 ChannelFactory 示例的典型代码: WSHttpBinding myBinding = new WSHttpBinding(); EndpointAddress m
我正在尝试更好地了解 WCF 的一些内部工作原理。我已经做了相当多的环顾四周,但我无法找到关于 ChannelFactory.Open() 与 IClientChannel.Open() 相比的明确解
在WCF Client Architecture , 它说 When using the ChannelFactory class with a service contract interface,
使用我的自定义接口(interface)的 WCF ChannelFactory CreateChannel 方法 - ChannelFactory myFactory= new ChannelFac
当您使用 SvcUtil.exe 从 WSDL 文件创建代码时,在创建的许多类型中有一个接口(interface)派生自服务接口(interface)和 IClientChannel。 如果,例如,创
我是一名优秀的程序员,十分优秀!