WCF客户端动态设置WCF服务器主机.docx
- 文档编号:24508445
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:7
- 大小:15.97KB
WCF客户端动态设置WCF服务器主机.docx
《WCF客户端动态设置WCF服务器主机.docx》由会员分享,可在线阅读,更多相关《WCF客户端动态设置WCF服务器主机.docx(7页珍藏版)》请在冰豆网上搜索。
WCF客户端动态设置WCF服务器主机
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;
///
/// ServiceFactory
/// 本地服务的具体实现接口
///
/// 修改纪录
///
/// 2011.07.03 版本:
2.0 JiRiGaLa 可以动态指定服务器地址的调用方法。
/// 2009.09.20 版本:
1.0 JiRiGaLa 创建。
///
/// 版本:
2.0
///
///
///
///
///
///
public class ServiceFactory :
IServiceFactory
{
private string host = string.Empty;
///
/// 主机地址
/// Host = "192.168.0.122";
///
public string Host
{
get
{
return host;
}
set
{
host = value;
}
}
private int port = 0;
///
/// 端口号
///
public int Port
{
get
{
return port;
}
set
{
port = value;
}
}
public ServiceFactory()
{
}
///
/// 初始化服务
///
public void InitService()
{
}
///
/// 动态设定WCF主机地址端口的方法
///
/// 主机地址
///
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
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"?
>
//jirigala-PC: 8888/DotNet.Service/ExceptionService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IExceptionService" name="DotNet.Service.ExceptionService">
//jirigala-PC: 8888/DotNet.Service/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.I" name="DotNet.Service.">
//jirigala-PC: 8888/DotNet.Service/FolderService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IFolderService" name="DotNet.Service.FolderService">
//jirigala-PC: 8888/DotNet.Service/ItemDetailsService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IItemDetailsService" name="DotNet.Service.ItemDetailsService">
//jirigala-PC: 8888/DotNet.Service/ItemsService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IItemsService" name="DotNet.Service.ItemsService">
//jirigala-PC: 8888/DotNet.Service/LogOnService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.ILogOnService" name="DotNet.Service.LogOnService">
//jirigala-PC: 8888/DotNet.Service/LogService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.ILogService" name="DotNet.Service.LogService">
//jirigala-PC: 8888/DotNet.Service/MessageService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IMessageService" name="DotNet.Service.MessageService">
//jirigala-PC: 8888/DotNet.Service/ModuleService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IModuleService" name="DotNet.Service.ModuleService">
//jirigala-PC: 8888/DotNet.Service/OrganizeService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IOrganizeService" name="DotNet.Service.OrganizeService">
//jirigala-PC: 8888/DotNet.Service/ParameterService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IParameterService" name="DotNet.Service.ParameterService">
//jirigala-PC: 8888/DotNet.Service/PermissionItemService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IPermissionItemService" name="DotNet.Service.PermissionItemService">
//jirigala-PC: 8888/DotNet.Service/PermissionService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IPermissionService" name="DotNet.Service.PermissionService">
//jirigala-PC: 8888/DotNet.Service/RoleService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IRoleService" name="DotNet.Service.RoleService">
//jirigala-PC: 8888/DotNet.Service/SequenceService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.ISequenceService" name="DotNet.Service.SequenceService">
//jirigala-PC: 8888/DotNet.Service/StaffService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IStaffService" name="DotNet.Service.StaffService">
//jirigala-PC: 8888/DotNet.Service/UserService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IUserService" name="DotNet.Service.UserService">
//jirigala-PC: 8888/DotNet.Service/BusinessDbHelperService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IDbHelperService" name="DotNet.Service.BusinessDbHelperService">
//jirigala-PC: 8888/DotNet.Service/UserCenterDbHelperService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IDbHelperService" name="DotNet.Service.UserCenterDbHelperService">
//jirigala-PC: 8888/DotNet.Service/WorkFlowActivityAdminService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IWorkFlowActivityAdminService" name="DotNet.Service.WorkFlowActivityAdminService">
//jirigala-PC: 8888/DotNet.Service/WorkFlowCurrentService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IWorkFlowCurrentService" name="DotNet.Service.WorkFlowCurrentService">
//jirigala-PC: 8888/DotNet.Service/WorkFlowProcessAdminService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.IWorkFlowProcessAdminService" name="DotNet.Service.WorkFlowProcessAdminService">
//jirigala-PC: 8888/DotNet.Service/TableColumnsService/" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.IService.ITableColumnsService" name="DotNet.Service.TableColumnsService">
00: 05" openTimeout="00: 00: 02" receiveTimeout="10: 10: 10" sendTimeout="00: 00: 30">
复制代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WCF 客户端 动态 设置 服务器 主机