惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
IT之家
IT之家
博客园 - 聂微东
The Cloudflare Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
H
Help Net Security
博客园 - 叶小钗
V
V2EX
WordPress大学
WordPress大学
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
C
Check Point Blog
B
Blog
D
DataBreaches.Net
美团技术团队
罗磊的独立博客

博客园 - 冰绿茶

解决Ehcache缓存警告问题 关于NHibernate、Castle和WCF做分布式事务时发生异常的解决办法 数据绑定控件和XmlDataSource控件结合使用,通过后台绑定Xml数据片段遇到的问题 微软StockTrader 2.03 学习笔记(7)--配置服务实现示例指南(三) 微软StockTrader 2.03 学习笔记(6)--配置服务实现示例指南(二) 微软StockTrader 2.03 学习笔记(5)--配置服务实现示例指南(一) 微软StockTrader 2.03 学习笔记(4)--配置数据库生成工具介绍 SQLServer实战经验分享--ServiceBroker安全配置和使用示例 ASP.NET Trick文章系列--使用State Server管理Session状态的另类经济用法 微软StockTrader 2.03 学习笔记(3)--配置网站和配置服务在StockTrader中的使用示例 在数据库事务设计中经常会遇到的疑惑 微软StockTrader 2.03 学习笔记(2)--什么是配置网站和配置服务、配置存储库 微软StockTrader 2.03 学习笔记(1)--学习大纲整理 asp.net 2.0页面性能的考虑--异步页面处理模型 Asp.net 2.0 动态加载其他子目录用户控件问题 Web 下配置文件信息的读写 .net 2.0 中对配置文件的读写 ASP.NET 2.0加密网站配置文件中的信息 - 冰绿茶 - 博客园 Understanding ASP.NET Provider Model (Creating Custom Membership and Role Providers) - Part 3
微软StockTrader 2.03 学习笔记(8)--配置服务实现示例指南(四)
冰绿茶 · 2009-02-27 · via 博客园 - 冰绿茶

    第八步:添加一个自定义配置设置

    在这个步骤中,我们将为Tutorial宿主添加一个自定义配置设置,这个设置用于控制在getDataObject服务操作中返回的默认贷方余额。再次说明这儿只是举个例子,配置设置是应用程序的特殊设置,它们也可能使用其它方式,比如通过在web.config或.exe.config的<appSettings>配置节中来实现设置;在这个示例中,现在这个设置将:

  · 存储在配置存储数据库中。

  · 通过数据库实现中心化管理保证所有运行的节点和新添加的节点都拥有相同的设置值。

  · 可通过配置网站ConfigWeb来实现更新。

  · 不需要重新部署配置文件和在运行的节点中停止/重启宿主进程就能实现动态更新;如果要更新的配置设置存储在配置文件中就需要这些操作。

    添加设置

    1.打开Visual Studio TutorialHost解决方案,在解决方案的TutorialSettings项目中打开Settings.cs文件。

    2.你将添加一个新的设置,DEFAULT_CREDIT_BALANCE,使用如下的这行代码:

public static decimal 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;
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了。