无配置WCF客户端的一个简单到令人发指的实现方法

因为项目比较大,接口一大堆,同时也是为了模块间完全解耦(只依赖Common),只能是采用多个WCF服务类库的方案。这样带来的问题就是上帝都不知道在配置文件中到底需要配置多少个Endpoint!理论上是一个模块一个Endpoint,但问题是没有人知道今后这个系统会有哪些模块。于是,只能是不要配置文件了。

为了实现在代码中配置WCF客户端,废了好几天的时间,看了无数的文章,尝试了N种方法。。。。。结果,因为一次偶然的bug,发现了这个真的让人欲哭无泪的、天理不容的、简单到令人发指的方法!!!啥都不说了,贴代码。

        #region 字段声明

        private EndpointAddress _Address;
        private NetTcpBinding _Binding = new NetTcpBinding();
        private BaseService.BaseClient _Client;

        #endregion
        
        #region 构造函数 
        public Login() 
        { 
            //从配置文件读取地址和端口设置
            _BaseAddress = String.Format("net.tcp://{0}:{1}/", Config.BaseAddress(), Config.Port());
            _Address = new EndpointAddress(_BaseAddress + "MainForm");//为不同的服务加上相应的路径,这样多个服务就可以使用同一个端口
            _Binding.Security.Mode = SecurityMode.None; 
            _Binding.MaxReceivedMessageSize = 1048576; 
            _Binding.ReaderQuotas.MaxStringContentLength = 16777216; 
            _Binding.ReaderQuotas.MaxArrayLength = 16777216;
            InitializeComponent();
        }
        
        #endregion

        private void InitOrgTree()
        {
            _Client = new BaseService.BaseClient(_Binding, _Address);
            _OrgList = _Client.OrgTreeList();
            _MemberList = _Client.GetMemberList();
            _Client.Close();
        }
简单说明下,真的很简单。。。申明两个变量,分别是_Address和_Binding,_Binding的类型需要根据你所使用的网络协议,用对应的类型去声明。

然后给_Binding设置一些需要设置的属性。最后,在实例化xxx(取决于添加服务引用时输入的名字)Client方法里面传入这两个参数就行了。

什么反射!什么工厂!!都弱爆了有木有!!!



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值