第八步:添加一个自定义配置设置
在这个步骤中,我们将为Tutorial宿主添加一个自定义配置设置,这个设置用于控制在getDataObject服务操作中返回的默认贷方余额。再次说明这儿只是举个例子,配置设置是应用程序的特殊设置,它们也可能使用其它方式,比如通过在web.config或.exe.config的<appSettings>配置节中来实现设置;在这个示例中,现在这个设置将:
· 存储在配置存储数据库中。
· 通过数据库实现中心化管理保证所有运行的节点和新添加的节点都拥有相同的设置值。
· 可通过配置网站ConfigWeb来实现更新。
· 不需要重新部署配置文件和在运行的节点中停止/重启宿主进程就能实现动态更新;如果要更新的配置设置存储在配置文件中就需要这些操作。
添加设置
1.打开Visual Studio TutorialHost解决方案,在解决方案的TutorialSettings项目中打开Settings.cs文件。
2.你将添加一个新的设置,DEFAULT_CREDIT_BALANCE,使用如下的这行代码:
3. 保存文件。你操作完的文件看起来如下所示:
4.重新编译以及按F5启动你的宿主应用程序。
5.在配置网站(localadmin, 密码 yyy)中登录你的宿主程序,配置服务终结点地址http://localhost:8001/tutorial/config。
6.选择上面红色圈圈标注的Edit Configuration链接。
7.点击上面红色圈圈标注的Define/Edit Keys按钮。
8.点击Add Key按钮。
9.你将要为新添加的关键词输入如下值:
Configuration Key Display Name: Default Customer Credit Balance (可以输入你想要的任何值)
Settings Class Field Name: DEFAULT_CREDIT_BALANCE (必须与添加到Settings类中的字段名匹配)
Settings Group Name: Settings Group 1 (可以是你想要的任何值; 取消选择Select From Existing Groups选项框你可以创建你自己的组名称)
Data Type: decimal
Key Description: The default customer credit balance
Key Valid Values: any decimal
Key Level: Basic
Read Only: false
Initial Key Value: 50.25
Display Order: 0
10.点击Add按钮。
11.点击主菜单导航Configuration菜单按钮。
你可以看到新的设置组Settings Group 1已经被添加,而且通过这个组的Edit Configuration链接可以来调整这些新添加的设置。
通过配置网站的Define/Edit Keys按钮链接,你可以使用相同的方式添加其它的设置,也可以来定义你想要的新的设置组。你也可以重新分配这些配置设置的隶属组和等级等等。
同时,在给这些配置设置指定值的时候,系统会根据Settings类中的原始类型进行默认的类型验证。当然你也可以添加自定义的验证逻辑(这些验证逻辑将在更新到配置存储库之前执行);以后,如果设置值发生了修改系统就能执行这些自定义的验证逻辑了(跨所有对等节点执行)。你可以通过ConfigurationActions类来添加你需要的验证和配置动作行为逻辑,具体可以查看Configuration Service 2.0 Technical Guide来了解详情。这个示例中的设置,基础的验证逻辑已经足够了,所以我们就不需要在修改的时候再去添加其它逻辑了;当改动发生时,配置服务会自动更新所有在线运行节点的存储在内存中的这个值;同时也会更新配置存储数据库中的值。因此也就不需要其它额外的特殊设置了。
在TutorialServiceImplementation项目中使用这个设置
当前,我们已经有了一个设置定义,所以在TutorialServiceImplementation项目中我们将添加利用这个设置的逻辑。
1.打开TutorialServiceImplementation项目,在Visual Studio编辑器中打开TutorialService.cs文件。
2.在项目中添加TutorialSettings项目的引用。
3.在项目中添加ConfigService.ConfigurationServiceBase.dll程序集,程序集在[stocktrader setup directory]\SharedLibraries\Configuration目录下。
4. 修改TutorialService实现类如下所示,新添加或修改的代码加粗显示:
using System.Collections.Generic;
using System.Text;
using Tutorial.DataContract;
using Tutorial.ServiceContract;
using Tutorial.Settings;
namespace Tutorial.ServiceImplementation
{
public class TutorialService : ITutorialService
{
public void isOnline()
{
return;
}
public TutorialDataObject getDataObject(int customerID)
{
TutorialDataObject myObject = new TutorialDataObject(
customerID,
"Customer Name",
Settings.Settings.DEFAULT_CREDIT_BALANCE);
return myObject;
}
}
}
现在,不需要通过硬编码值了,客户端访问getDataObject方法将会返回当前DEFAULT_CREDIT_BALANCE的值。
5.重新编译这个项目就OK了。