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,如需转载请自行联系原作者
目录
打赏
0
0
0
0
265
分享
相关文章
阿里云服务器搭建网站教程:经济型e实例2核2G快速搭建网站图文教程参考
目前在阿里云的活动中,轻量应用服务器2核2G3M带宽只要68元1年,2核4G4M带宽只要298元1年。云服务器ECS经济型e实例2核2G 3M固定带宽,价格只要99元/1年,新老用户都可购买,企业用户购买2核4G5M带宽199元一年,为用户提供长期权益。这些都是个人和普通企业用户搭建网站使用较多的云服务器,本文为大家展示使用经济型e实例2核2G3M带宽快速搭建网站的相关教程,以供参考。
205 18
阿里云服务器付费类型、地域、镜像、存储、带宽和安全组设置与选择注意事项参考
在我们通过自定义购买的方式购买阿里云服务器器ECS时,会有多个选项,有的新手用户可能并不是很清楚这些选项是什么,选择或设置时需要注意什么,本文将从付费类型、地域与可用区、镜像、存储、带宽和安全组等多个方面,为您详细解析云服务器购买过程中各个参数与配置的选择注意事项,以供参考。
阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
695 87
阿里云虚拟主机、轻量应用服务器、云服务器、云·速成美站、云·原生建站区别及选择参考
在选择阿里云产品完整自己网站搭建的时候,面对云虚拟主机、轻量应用服务器、云服务器ECS、云·速成美站和云·原生建站等多种选择,很多用户不是很清楚他们之间的区别。每种产品都有其独特的优势和适用场景,如何根据自己的需求和技术背景选择最适合的建站产品,成为了用户关注的焦点。本文将详细比较阿里云这五种建站产品的优势和劣势,以及它们的适用人群,以供选择参考。
阿里云服务器租用价格参考:云服务器各收费项目收费标准与活动价格
阿里云服务器收费项目有实例价格、预留实例券、专有宿主机、块存储价格、存储容量单位包、带宽价格和快照服务价格,收费模式有包年包月和按量付费模式。本文为大家汇总了2025年阿里云服务器各个收费项目的最新收费标准与云服务器的最新活动价格,以供参考和了解。
阿里云服务器实例选择:经济型、通用算力型、计算型、通用型、内存型实例选择参考
当我们通过阿里云的活动购买云服务器会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,例如同样是4核8G的配置的云服务器,经济型e实例活动价格1595.11元/1年起,通用算力型u1实例要955.58元/1年起,而计算型c8i实例则要2845.81元/1年起,价格差别还是比较大的,因此,阿里云经济型、通用算力型、计算型、通用型、内存型实例云服务器有何差别就是很多新手用户比较关心的问题了,下面小编来为大家简单介绍下它们之间的区别。
阿里云服务器实例选择参考:根据业务场景选择云服务器实例规格
对于初次接触阿里云服务器的用户来说,面对众多实例规格往往不知道如何选择,因为云服务器实例规格不同,价格也不一样,往往会感到无从下手。本文旨在通过详细解析阿里云服务器的不同实例规格及其适用场景,为用户提供一份实用的选型指南,以供参考。
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。
阿里云服务器计算型c7/c8y/c8i,通用型g7/g8y/g8i,内存型r7/r8y/r8i区别及选择参考
为了满足不同企业级用户的多样化需求,阿里云在当下的活动中推出了多款计算型、通用型和内存型的云服务器实例,包括计算型c7/c8y/c8i、通用型g7/g8y/g8i以及内存型r7/r8y/r8i等。这些实例各具特色,适用于不同的应用场景和业务需求。本文将为您详细解析这些实例的区别,以及选择参考,帮助您根据自己的需求选择合适的阿里云服务器实例。
阿里云服务器四种常见购买方式图文教程及适用场景参考(2025更新)
阿里云服务器如何购买?比较常见的购买方式有自定义购买、快速购买、通过活动购买、通过云市场镜像页面购买这四种购买方式,每种方式都有主要的适合对象,购买流程也不是完全一样的。例如想要快速购买的用户,一般选择快速购买、通过活动购买最好,如果是想购买的云服务器已经部署好一些自己项目运行所需的各种环境和软件,则选择通过云市场镜像页面购买这种方式更好。本文为以图文形式为大家展示用户选择较多的四种购买方式及适用场景,以供参考。

热门文章

最新文章