提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|行业资讯|编辑:郝浩|2015-09-21 15:28:34.000|阅读 169 次
概述:本文将介绍混合式开发框架模式中各种登陆方式的配置实现。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
在我们很多程序的登陆过程中,如果对于一些复杂的内容,可能都有一些配置管理的对话框,本文介绍的混合式开发框架,是指什么呢,我下面给了一个定义。
《混合式开发框架》是指混合了传统《Winform开发框架》和《WCF开发框架》的特点,可以在两者之间自由切换,统一了系统界面层对业务服务的调用模式,所有组件模块均实现两种方式的调用,是一种弹性化非常好的框架应用,既可用于单机版软件或者基于局域网内的应用软件,也可以用于分布式技术的互联网环境应用。
对于这种混合式模式,上面说到了有两种方式,一种是常规的访问数据库方式,一种是访问WCF服务方式,而访问WCF服务,可能有基于局域网(内网)模式,也可能是基于互联网(外网)模式,那么我们就可能配置三种登陆方式,如果每次需要手工修改配置文件,可能比较麻烦,如果我们能够通过程序方式来实现参数的界面化配置,那么工作就轻松很多,也不容易出错。
关于配置的管理,我肯定是首先推荐SettingsProvider.net这个组件,大家需要了解这个组件的使用,可以参考我的随笔《》,这里可以结合FireFoxDialog界面效果实现比较友好的配置管理,界面效果如下所示。
在WCF的配置文件中,我们可以看到很多对于IP地址的配置,而一般我们把WCF的配置信息放到一个独立的配置文件里面,方便管理。
对于局域网的WCF客户端的配置信息,大概效果如下所示。
而对于外网,也只是把这些IP换成公网IP即可,一般来说,这些是独立的配置文件,我们一般还有一个主配置文件**.exe.config,用来配置我们框架常用到的一些配置信息。
如下所示,在我们混合式需要访问本地数据库的时候,就可以在主配置文件里面保存主要的数据库连接信息。
前面介绍了关于参数配置和WCF配置文件的一些相关信息,基于这些考虑,我们应该在混合式模式的登陆界面里面,设计好相关界面,让用户可以方便配置访问不同的数据源,以便实现真正混合式的强大功能和便利性。
首先我们来介绍一下我的混合式框架,登陆界面的设计。
单击参数设置按钮,可以进入登陆访问参数的界面对话框,在里面可以友好直观的配置相关的WCF访问参数,界面如下所示,这里面使用了类似FireFox的界面组件,后台的文件存储,主要是基于本地的XML存储,使用了SettingsProvider.net这个组件进行数据的存储管理。
如果是选择“单机版模式”,那么我们把对应的网络方式设置为不可选择,这样的效果比较好体现本地模式的排他性。
这些界面基本上介绍了如何处理混合式开发框架的参数配置内容了,具体的实现操作是如何的呢?下面我们来一步步分析介绍下。
首先我们定义一个用来保存和加载参数的一个实体类,用来存储对应的参数信息。
/// <summary> /// 用户登录的连接方式、访问方式 /// </summary> public class LoginParameter { /// <summary> /// 系统最后登录账号 /// </summary> [DefaultValue("admin")] public string LoginId { get; set; } /// <summary> /// 登陆密码 /// </summary> [ProtectedString] public string Password { get; set; } /// <summary> /// 记住密码 /// </summary> [DefaultValue(false)] public bool RememberPassword { get; set; } /// <summary> /// 是否为本地数据库连接方式,否则为使用WCF服务模式(内网,外网) /// </summary> [DefaultValue(false)] public bool IsLocalDatabase { get; set; } /// <summary> /// 内网WCF的主机地址 /// </summary> [DefaultValue("192.168.1.10")] public string InternalWcfHost { get; set; } /// <summary> /// 内网WCF的端口 /// </summary> [DefaultValue(8000)] public int InternalWcfPort { get; set; } /// <summary> /// 外网WCF的主机地址 /// </summary> [DefaultValue("183.6.161.193")] public string ExternalWcfHost { get; set; } /// <summary> /// 外网WCF的端口 /// </summary> [DefaultValue(8000)] public int ExternalWcfPort { get; set; } }
这样我们就可以以实体类为载体,对数据进行获取和保存操作了。
配置信息的加载和保存操作代码如下所示,这些保存操作就是基于SettingsProvider.net的。
/// <summary> /// 从本地XML文件中加载参数信息 /// </summary> private void LoadParameter() { store = new PortableStorage();//保存在本地计算机 settings = new SettingsProvider(store); parameter = settings.GetSettings<LoginParameter>(); if (parameter != null) { this.cmbzhanhao.Text = parameter.LoginId; this.chkRemember.Checked = parameter.RememberPassword; if (parameter.RememberPassword) { this.tbPass.Text = parameter.Password; } else { this.tbPass.Text = ""; } this.chkLocalVersion.Checked = parameter.IsLocalDatabase; //确保为正确的访问方式,网络版还是单机版 SetAccessType(this.chkLocalVersion.Checked); } } /// <summary> /// 把用户的信息保存到本地XML文件里面 /// </summary> private void SaveParameter() { store = new PortableStorage();//保存在本地计算机 settings = new SettingsProvider(store); parameter = settings.GetSettings<LoginParameter>(); if (parameter != null) { parameter.LoginId = this.cmbzhanhao.Text; if (parameter.RememberPassword) { parameter.Password = this.tbPass.Text; } else { parameter.Password = ""; } parameter.IsLocalDatabase = this.chkLocalVersion.Checked; settings.SaveSettings<LoginParameter>(parameter); } }
对于如果选择单机版模式,那么我们需要设置相应的参数,用来告诉混合式框架采用本地数据库模式,具体代码如下所示。
/// <summary> /// 单机版模式的复选框事件处理 /// </summary> private void chkLocalVersion_CheckedChanged(object sender, EventArgs e) { SetAccessType(this.chkLocalVersion.Checked); } /// <summary> /// 设置为网络方式还是单机版模式 /// </summary> /// <param name="localType">是否为单机版模式</param> private void SetAccessType(bool localType) { this.lblNetType.Enabled = !localType; this.radNetType.Enabled = !localType; AppConfig config = new AppConfig(); config.AppConfigSet("CallerType", localType ? "win" : "wcf"); ConfigurationManager.RefreshSection("appSettings"); }
如果是网络方式,还需要区分内网模式,还是外网模式,根据参数来对相关的配置文件进行修改,具体逻辑代码如下所示。
/// <summary> /// 网络方式(内网、外网)切换处理事件 /// </summary> private void radNetType_SelectedIndexChanged(object sender, EventArgs e) { ChangeConfig(); } /// <summary> /// 修改配置文件 /// </summary> private void ChangeConfig() { if (parameter != null) { bool isIntranet = radNetType.EditValue.ToString() == "内网"; if (isIntranet) { UpdateConfig(parameter.InternalWcfHost, parameter.InternalWcfPort); } else { UpdateConfig(parameter.ExternalWcfHost, parameter.ExternalWcfPort); } } else { MessageDxUtil.ShowError("获取参数信息失败"); } } /// <summary> /// WCF模式下,修改配置文件中的主机地址信息和端口 /// </summary> /// <param name="serverIPAddress">主机地址信息</param> /// <param name="serverPort">端口</param> private void UpdateConfig(string serverIPAddress, int serverPort) { string basePath = System.Environment.CurrentDirectory; UpdateConfigFile(serverIPAddress, serverPort, Path.Combine(basePath, "BaseWcfConfig.config")); UpdateConfigFile(serverIPAddress, serverPort, Path.Combine(basePath, "WcfConfig.config")); } /// <summary> /// 通过正则标识方式替换其中的主机信息和端口参数 /// </summary> /// <param name="serverIPAddress">主机地址信息</param> /// <param name="serverPort">端口</param> /// <param name="exeFilePath">配置文件地址</param> private void UpdateConfigFile(string serverIPAddress, int serverPort, string exeFilePath) { string address = File.ReadAllText(exeFilePath, System.Text.Encoding.UTF8); string pattern = "://.*?/"; string replacement = string.Format("://{0}:{1}/", serverIPAddress, serverPort); address = Regex.Replace(address, pattern, replacement); File.WriteAllText(exeFilePath, address, System.Text.Encoding.UTF8); }
以上就是我对于混合式开发框架的登陆方式和登陆参数进行的配置信息管理的一个案例,希望对大家有帮助。
本文转载自
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢