WCF客户端动态设置WCF服务器主机的地址的方法参考,可以连接多个相同WCF主机的方法

简介:

 最近做一个项目,需要在客户端灵活配置连接到哪个服务器的功能,例如客户端是一个,现在想连接A服务器就连A服务器,想连接B服务器就连接B服务器,当然不需要手动修改配置文件,直接通过程序来实现WCF目标主机的配置功能。

  参考核心代码如下:

// --------------------------------------------------------------------
//  All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd. 
// --------------------------------------------------------------------

using  System.ServiceModel;

namespace  DotNet.WCFClient
{
using  DotNet.IService;
using  DotNet.Utilities;

/// <summary>
///  ServiceFactory
///  本地服务的具体实现接口
///
///  修改纪录
///
///         2011.07.03 版本:2.0 JiRiGaLa 可以动态指定服务器地址的调用方法。
///         2009.09.20 版本:1.0 JiRiGaLa 创建。
///
///  版本:2.0
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2011.07.03 </date>
/// </author>
/// </summary>
public class  ServiceFactory : IServiceFactory
   {
private string  host  = string .Empty;
/// <summary>
///  主机地址
///  Host = "192.168.0.122";
/// </summary>
public string  Host
       {
get
           {
return  host;
           }
set
           {
               host 
=  value;
           }
       }

private int  port  = 0 ;
/// <summary>
///  端口号
/// </summary>
public int  Port
       {
get
           {
return  port;
           }
set
           {
               port 
=  value;
           }
       }

public  ServiceFactory()
       {
       }

/// <summary>
///  初始化服务
/// </summary>
public void  InitService()
       {
       }

/// <summary>
///  动态设定WCF主机地址端口的方法
/// </summary>
/// <param name="address"> 主机地址 </param>
/// <returns> 主机地址 </returns>
public virtual  EndpointAddress GetHotsUrl(EndpointAddress address)
       {
//  若当前配置都是空的,就不用生成新的URL了。
if  ( string .IsNullOrEmpty(Host)  &&  (Port  == 0 ))
           {
return  address;
           }
//  判断当前配置的情况
string  endpointAddress  = string .Empty;
if  ( string .IsNullOrEmpty(Host))
           {
               Host 
=  address.Uri.Host;
           }
if  (Port  == 0 )
           {
               Port 
=  address.Uri.Port;
           }
           endpointAddress 
=  address.Uri.Scheme  + " :// " +  Host  + " : " +  Port.ToString()  +  address.Uri.LocalPath;
           address 
= new  EndpointAddress(endpointAddress);
return  address;
       }

public virtual  ISequenceService CreateSequenceService()
       {
           ChannelFactory
< ISequenceService >  channelFactory  = new  ChannelFactory < ISequenceService > ( " DotNet.Service.SequenceService " );
           channelFactory.Endpoint.Address 
=  GetHotsUrl(channelFactory.Endpoint.Address);
//  加强安全验证防止未授权匿名调用
           channelFactory.Credentials.UserName.UserName  =  BaseSystemInfo.ServiceUserName;
           channelFactory.Credentials.UserName.Password 
=  BaseSystemInfo.ServicePassword;
           ISequenceService proxy 
=  channelFactory.CreateChannel();
return  proxy;
       }

      }
   }
}

  配套的配置文件参考如下:

<? xml version = " 1.0 " ?>
< configuration >
< system.serviceModel >
< client >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/ExceptionService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IExceptionService "  name = " DotNet.Service.ExceptionService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/FileService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IFileService "  name = " DotNet.Service.FileService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/FolderService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IFolderService "  name = " DotNet.Service.FolderService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/ItemDetailsService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IItemDetailsService "  name = " DotNet.Service.ItemDetailsService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/ItemsService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IItemsService "  name = " DotNet.Service.ItemsService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/LogOnService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.ILogOnService "  name = " DotNet.Service.LogOnService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/LogService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.ILogService "  name = " DotNet.Service.LogService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/MessageService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IMessageService "  name = " DotNet.Service.MessageService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/ModuleService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IModuleService "  name = " DotNet.Service.ModuleService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/OrganizeService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IOrganizeService "  name = " DotNet.Service.OrganizeService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/ParameterService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IParameterService "  name = " DotNet.Service.ParameterService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/PermissionItemService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IPermissionItemService "  name = " DotNet.Service.PermissionItemService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/PermissionService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IPermissionService "  name = " DotNet.Service.PermissionService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/RoleService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IRoleService "  name = " DotNet.Service.RoleService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/SequenceService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.ISequenceService "  name = " DotNet.Service.SequenceService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/StaffService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IStaffService "  name = " DotNet.Service.StaffService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/UserService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IUserService "  name = " DotNet.Service.UserService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/BusinessDbHelperService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IDbHelperService "  name = " DotNet.Service.BusinessDbHelperService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/UserCenterDbHelperService/ "  binding = " netTcpBinding " bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IDbHelperService "  name = " DotNet.Service.UserCenterDbHelperService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/WorkFlowActivityAdminService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IWorkFlowActivityAdminService "  name = " DotNet.Service.WorkFlowActivityAdminService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/WorkFlowCurrentService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IWorkFlowCurrentService "  name = " DotNet.Service.WorkFlowCurrentService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/WorkFlowProcessAdminService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.IWorkFlowProcessAdminService "  name = " DotNet.Service.WorkFlowProcessAdminService " ></ endpoint >
< endpoint address = " net.tcp://jirigala-PC:8888/DotNet.Service/TableColumnsService/ "  binding = " netTcpBinding "  bindingConfiguration = " netTcpBindingSmiple "  contract = " DotNet.IService.ITableColumnsService "  name = " DotNet.Service.TableColumnsService " ></ endpoint >
</ client >

< bindings >
< netTcpBinding >
< binding name = " netTcpBindingSmiple "  maxBufferPoolSize = " 2147483647 "  maxReceivedMessageSize = " 2147483647 "  closeTimeout = " 00:00:05 "  openTimeout = " 00:00:02 "  receiveTimeout = " 10:10:10 "  sendTimeout = " 00:00:30 " >
< security mode = " Message " >
< message clientCredentialType = " UserName " />
</ security  >
</ binding >
</ netTcpBinding >
</ bindings >

</ system.serviceModel >
</ configuration >




本文转自 jirigala 51CTO博客,原文链接:http://blog.51cto.com/2347979/1197391,如需转载请自行联系原作者
相关文章
|
3月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
494 8
|
3月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
244 11
|
3月前
|
弹性计算
阿里云8核16G云服务器收费标准:最新价格及省钱购买方法整理
阿里云8核16G云服务器价格因实例类型而异。计算型c9i约743元/月,一年6450元(7折);通用算力型u1约673元/月,一年仅需4225元(5.1折)。实际价格享时长折扣,详情见ECS官网。
|
3月前
|
域名解析 弹性计算 负载均衡
给阿里云服务器加速的方法有哪些?
本文介绍如何通过阿里云CDN加速、ECS网络优化及SLB负载均衡三种方法提升服务器响应速度。涵盖具体操作步骤,助力用户优化访问性能。
|
4月前
|
弹性计算 定位技术 数据中心
阿里云服务器选择方法:配置、地域及付费模式全解析
2025阿里云服务器选购指南:就近选择地域以降低延迟,企业用户优选2核4G5M带宽u1实例,仅199元/年;个人用户可选2核2G3M带宽ECS,99元/年起。长期稳定业务选包年包月,短期或波动场景用按量付费,轻松搭建网站首选高性价比配置。
|
5月前
|
弹性计算 小程序 容灾
2025购买阿里云服务器配置选择方法:企业+个人+学生攻略
2025年阿里云服务器购买省钱攻略,涵盖个人、中小企业及高性能配置推荐。个人用户优选38元轻量或99元ECS,企业用户选199元2核4G服务器,游戏用户适合4核16G或8核32G配置,详情请参考最新活动及攻略。
1233 11
|
7月前
|
网络协议 Ubuntu
在Ubuntu 18.04/20.04 LTS设置静态DNS服务器的过程。
以上步骤提供了一种简洁明了的指导,让用户能够在Ubuntu系统中有效设置静态DNS服务器,这对日常管理和网络配置来说是非常实用的技能。
846 18
|
5月前
|
缓存 监控 前端开发
详述uniapp项目部署于Nginx服务器的配置优化方法。
综上所述,uniapp项目部署于Nginx的优化方法多种多样,应根据实际情况灵活地采取合适的策略。配置后持续监控和调试,适时调整配置以保持最佳性能,并确保随着应用需求和访问模式的变化,服务器配置得到适当的更新和优化。
275 0
|
6月前
|
安全 关系型数据库 网络安全
安全加固:启动PostgreSQL 14服务器SSL加密的方法指南在CentOS 7环境中
通过上述步骤,你可以为PostgreSQL数据库服务器设置SSL加密,从而增加数据在传输中的安全性。确保维持证书的有效性,并且定期更新和管理密钥,以防止未授权访问。
322 0
|
7月前
|
数据采集 人工智能 BI
MyEMS能源管理系统后台配置-邮件服务器设置
本文介绍其邮件服务器配置方法。
109 0