首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏大内老A

    WCF技术剖析之八:ClientBase中对ChannelFactory的缓存机制

    ChannelFactory<T>则是服务代理的创建者。 , proxy2.ChannelFactory) = {0}", 5: object.ReferenceEquals(proxy1.ChannelFactory, proxy2.ChannelFactory , proxy2.ChannelFactory) = {0}", 7: object.ReferenceEquals(proxy1.ChannelFactory, proxy2.ChannelFactory , proxy2.ChannelFactory) = {0}", 8: object.ReferenceEquals(proxy1.ChannelFactory, proxy2.ChannelFactory , proxy2.ChannelFactory) = {0}", 7: object.ReferenceEquals(proxy1.ChannelFactory, proxy2.ChannelFactory

    1.2K110发布于 2018-01-16
  • 来自专栏大内老A

    WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]

    channelFactory = new ChannelFactory<ICalculator>("calculatorservice")) { ICalculator 这不但会让你的程序显得臃肿不堪,而且带来非常多重复的代码,此外频繁创建ChannelFactory<TChannel>对性能也会有影响。 我们可以通过一些公共个方法实现对重复代码(ChannelFactory<TChannel>的创建,服务调用的创建、中止和关闭,以及异常处理)。 >(string endpointConfigurationName) 12: { 13: ChannelFactory<TChannel> channelFactory   19: if (null == channelFactory) 20: { 21: channelFactory

    2.4K110发布于 2018-01-16
  • 来自专栏大内老A

    WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]

    channelFactory = new ChannelFactory<ICalculator>("calculatorservice")) { ICalculator 这不但会让你的程序显得臃肿不堪,而且带来非常多重复的代码,此外频繁创建ChannelFactory<TChannel>对性能也会有影响。 我们可以通过一些公共个方法实现对重复代码(ChannelFactory<TChannel>的创建,服务调用的创建、中止和关闭,以及异常处理)。 >(string endpointConfigurationName) 12: { 13: ChannelFactory<TChannel> channelFactory   19: if (null == channelFactory) 20: { 21: channelFactory

    2.3K90发布于 2018-01-16
  • 来自专栏大内老A

    WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]

    ChannelFactoryCreator的静态工厂类,通过它来创建或获取ChannelFactory<T>方法。 由于ChannelFactory<T>的创建是一件费时的工作,为了提供更好的性能,和ClientBase<T>一样采用了ChannelFactory<T>的缓存机制(《ClientBase<T>中对ChannelFactory 20: { 21: channelFactory = channelFactories[endpointName] as ChannelFactory 26: channelFactory = new ChannelFactory<T>(endpointName); 27: lock 在Create<T>方法中,先通过传入的终结点配置名称查看缓存中是否存在已经创建好的ChannelFactory<T>对象,如果存在则直接返回,否则创建新的ChannelFactory<T>对象,并在返回之前将其加入缓存

    1K60发布于 2018-01-16
  • 来自专栏大内老A

    WCF客户端运行时架构体系详解[上篇]

    对于WCF客户端应用编程接口来说,ChannelFactory<TChannel>是一个核心类型。 用于创建服务代理对象的ChannelFactory<TChannel>对象本身就是基于某个具体的客户端终结点创建的。 ChannelFactory(Type channelType); 10: public ChannelFactory(Binding binding, EndpointAddress remoteAddress ); 11: public ChannelFactory(Binding binding, string remoteAddress); 12: public ChannelFactory ServiceEndpoint在ChannelFactory<TChannel>中的结构分布如下图所示。 ?

    1.5K110发布于 2018-02-07
  • 来自专栏逆熵

    小满读源码 · 从demo里找真相

    对象赋值给了this.channelFactory。 io.netty.channel.ReflectiveChannelFactory@Deprecatedpublic B channelFactory(ChannelFactory<? extends C> channelFactory) { if (channelFactory == null) { throw new NullPointerException ("channelFactory"); } if (this.channelFactory ! = null) { throw new IllegalStateException("channelFactory set already"); } this.channelFactory

    57810编辑于 2023-03-06
  • 来自专栏二进制文集

    Netty 的 Channel、Promise、Pipeline 详解

    再来看 return 语句中的 channelFactory 方法: public B channelFactory(io.netty.channel.ChannelFactory<? extends C> channelFactory) { return channelFactory((ChannelFactory<C>) channelFactory); } 下面代码可以看出 public B channelFactory(ChannelFactory<? extends C> channelFactory) { if (channelFactory == null) { throw new NullPointerException ("channelFactory"); } if (this.channelFactory !

    4.7K30发布于 2019-11-10
  • 来自专栏程序那些事

    netty系列之:请netty再爱UDT一次

    这个包里面主要定义了UDT的各种channel、channel配置、UDT消息和提供ChannelFactory和SelectorProvider的工具类NioUdtProvider. 当然,如果不是NioSocketChannel,那么对应的ChannelFactory和SelectorProvider也会有所变化。 构建ChannelFactory 上面提到的两种Type和三种Kind都是用来定义channel的,所以如果将其混合,会生成六种不同的channelFactory,分别是: public static final ChannelFactory<UdtServerChannel> BYTE_ACCEPTOR = new NioUdtProvider<UdtServerChannel>( TypeUDT.STREAM, KindUDT.ACCEPTOR); public static final ChannelFactory<UdtChannel> BYTE_CONNECTOR = new

    55121编辑于 2022-01-05
  • 来自专栏程序那些事

    netty系列之:请netty再爱UDT一次

    这个包里面主要定义了UDT的各种channel、channel配置、UDT消息和提供ChannelFactory和SelectorProvider的工具类NioUdtProvider. 当然,如果不是NioSocketChannel,那么对应的ChannelFactory和SelectorProvider也会有所变化。 构建ChannelFactory 上面提到的两种Type和三种Kind都是用来定义channel的,所以如果将其混合,会生成六种不同的channelFactory,分别是: public static final ChannelFactory<UdtServerChannel> BYTE_ACCEPTOR = new NioUdtProvider<UdtServerChannel>( TypeUDT.STREAM, KindUDT.ACCEPTOR); public static final ChannelFactory<UdtChannel> BYTE_CONNECTOR = new

    70620编辑于 2022-01-21
  • 来自专栏技术之路

    解决 wcf HTTP 无法注册 另一应用程序正在使用 TCP 端口 80

    localhost:80  而80端口已经被IE浏览器占用, 如果我们不在客户端的代理端做任何事情的话,很可能出这个错误 解决方法: 1修改代码 DuplexChannelFactory<ILogService> channelFactory WSDualHttpBinding ws = new WSDualHttpBinding(); ws.ClientBaseAddress = new Uri("http://localhost:8566"); channelFactory.Endpoint.Binding = ws; channelFactory.Endpoint.Address = new EndpointAddress("http://localhost:8567/server"); ILogService service = channelFactory.CreateChannel(); 2修改配置文件 <wsDualHttpBinding clientBaseAddress="http://localhost

    1.2K90发布于 2018-01-31
  • 来自专栏大内老A

    WCF的安全审核——记录谁在敲打你的门

    1: ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorService"); (); 6: Invoke(calculator); 7:  8: channelFactory = new ChannelFactory<ICalculator>("calculatorService "); 9: credential = channelFactory.Credentials.Windows.ClientCredential; 10: credential.UserName 1: ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorService"); (); 6: Invoke(calculator); 7:  8: channelFactory = new ChannelFactory<ICalculator>("calculatorService

    95990发布于 2018-02-07
  • 来自专栏jeremy的技术点滴

    解决dubbo导致tomcat无法优雅shutdown的问题

    而dubbo出于规避netty的一个bug // 因ChannelFactory的关闭有DirectMemory泄露, // 采用静态化规避 https://issues.jboss.org/browse /NETTY-424 privatestaticfinal ChannelFactory channelFactory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool releaseNettyClientExternalResources() { try { Field field = NettyClient.class.getDeclaredField("channelFactory "); field.setAccessible(true); ChannelFactory channelFactory = (ChannelFactory) field.get(NettyClient.class ); channelFactory.releaseExternalResources(); field.setAccessible(false); LOGGER.info("Release

    2.2K40发布于 2018-05-10
  • 来自专栏小工匠聊架构

    Netty Review - ServerBootstrap源码解析

    * You either use this or {@link #channelFactory(io.netty.channel.ChannelFactory)} if your * {@link (io.netty.channel.ChannelFactory)} instead. */ @Deprecated public B channelFactory(ChannelFactory<? extends C> channelFactory) { // 检查传入的channelFactory是否为空,如果为空则抛出NullPointerException if (channelFactory == null) { throw new NullPointerException("channelFactory"); } // 检查是否已经设置了channelFactory 赋值给成员变量channelFactory this.channelFactory = channelFactory; return self(); } option(ChannelOption.SO_BACKLOG

    43400编辑于 2024-05-26
  • 来自专栏码匠的流水账

    聊聊Elasticsearch的RoundRobinSupplier

    } ​ public S bindServerChannel(InetSocketAddress address, ChannelFactory } ​ @Override public S openChannel(InetSocketAddress address, ChannelFactory elasticsearch-7.0.1/libs/nio/src/main/java/org/elasticsearch/nio/ChannelFactory.java public abstract class ChannelFactory<ServerSocket extends NioServerSocketChannel, Socket extends NioSocketChannel> { rawChannel); scheduleChannel(channel, selector); return channel; } ​ //...... } ChannelFactory

    44010发布于 2019-05-31
  • 来自专栏大内老A

    [WCF权限控制]基于Windows用户组的授权方式[下篇]

    7: { 8: static void Main(string[] args) 9: { 10:  11: ChannelFactory <ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorService"); 12: NetworkCredential credential = channelFactory.Credentials.Windows.ClientCredential; 13: (); 16: Invoke(calculator); 17:  18: channelFactory = new ChannelFactory <ICalculator>("calculatorService"); 19: credential = channelFactory.Credentials.Windows.ClientCredential

    1.2K100发布于 2018-01-16
  • 来自专栏大内老A

    [WCF安全系列]谈谈WCF的客户端认证[Windows认证]

    当你进行服务调用的时候,不管你是直接采用ChannelFactory<TChannel>创建服务代理的方式,还是通过导入元数据生成客户端代理的方式,设置Windows凭证都很容易。 ChannelFactory<TChannel>的基类ChannelFactory和ClientBase<TChannel>中都定义了一个只读属性ClientCredentials,该属性的类型为ClientCredentials 1: public class ChannelFactory<TChannel> : ChannelFactory 2: { 3: //省略成员 4: } 5: public abstract class ChannelFactory 6: { 7: //其他成员 8: public ClientCredentials Credentials 1: using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorService

    1.3K70发布于 2018-02-07
  • 来自专栏大内老A

    WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置;通过ChannelFactory<TChannel>创建服务代理对象。 最后根据导出的ServiceEndpoint对象创建ChannelFactory<ICalculator>对象,并创建服务代理进行服务调用。 ServiceEndpointCollection endpoints = wsdlImporter.ImportAllEndpoints(); 19: using (ChannelFactory <ICalculator> channelFactory = new ChannelFactory<ICalculator>(endpoints[0])) 20: { 21 : ICalculator calculator = channelFactory.CreateChannel(); 22: using

    1.1K60发布于 2018-01-16
  • 来自专栏大内老A

    WCF客户端运行时架构体系详解[下篇]

    当基于某个终结点创建的ChannelFactory<TChannel>被开启的之后,位于服务模型层的客户端运行时框架被成功构建。 站在编程的角度看ChannelFactory<TChannel>,它就是一个创建用于服务调用的服务代理对象的工厂。 反序列化回复消息       检验返回值(或者ref/out参数) 一、服务代理是一个透明代理 如果你阅读了《WCF技术剖析(卷1)》第8章《客户端(Client)》,你应该知道通过ChannelFactory 1: using (ChannelFactory<ICalculate> channelFactory = new ChannelFactory<ICalculate>("calculateservice 当我们使用ChannelFactory<TChannel>创建一个服务代理的时候,WCF会根据代表客户端运行时的ClientRuntime创建一个ServiceChannel对象。

    1.4K70发布于 2018-02-07
  • 来自专栏IT杂谈学习

    【Java】已解决:System.ServiceModel.EndpointNotFoundException

    BasicHttpBinding(); EndpointAddress address = new EndpointAddress("http://localhost:8080/Service"); ChannelFactory <IMyService> factory = new ChannelFactory<IMyService>(binding, address); IMyService client = factory.CreateChannel BasicHttpBinding(); // 错误的地址配置 EndpointAddress address = new EndpointAddress("http://localhost:8081/Service"); ChannelFactory <IMyService> factory = new ChannelFactory<IMyService>(binding, address); IMyService client = factory.CreateChannel <IMyService> factory = new ChannelFactory<IMyService>(binding, address); IMyService client = factory.CreateChannel

    56810编辑于 2024-09-12
  • 来自专栏CBeann的博客

    Netty(八)之Netty服务端启动流程

    (new ReflectiveChannelFactory<C>(channelClass)) 方法 //AbstractBootstrap public B channelFactory(io.netty.channel.ChannelFactory extends C> channelFactory) { return channelFactory((ChannelFactory<C>) channelFactory); } //AbstractBootstrap public B channelFactory(ChannelFactory<? extends C> channelFactory) { //if省略 //给成员变量赋值 this.channelFactory = channelFactory (); 跟进去发现是一个接口 public interface ChannelFactory<T extends Channel> { T newChannel(); } 然后发现上面接口的实现类有

    48310编辑于 2023-12-25
领券