使用实例配置文件中的参数

如果使用 XML 实例配置文件 (ICF) 来配置 Notification Services 实例,则可通过使用参数使 ICF 更安全、更具可移植性以及更易更新。还可以将 ICF 中的值传递到应用程序定义文件 (ADF) 中。

如果以编程方式配置 Notification Services 实例,则不存在参数对象。如果需要在一个位置中更新实例定义和应用程序定义的值,则可使用变量。

Notification Services 参数

Notification Services 允许使用参数替代元素值。由于以下一些原因,使用参数可能会有好处:

  • 可以将敏感数据保存在 ICF 和 ADF 的外部,仅在创建或更新实例时才提供值。
  • 可以一次性定义一个参数值,然后在多个元素中使用该参数值。
  • 通过将可能会更改的值置于一个位置,使实例和应用程序的更新更为容易。

在 ICF 或 ADF 中,要被替换的参数如下所示:%MyParam%。这是由百分比字符括起来的参数名。定义参数值时,需要指定参数名 (MyParam) 和参数值(如 MyServer)。

创建或更新实例时,Notification Services 使用指定的值 (MyServer) 替换参数 (%MyParam%)。

对于 ICF,可以在 ParameterDefaults 元素中、nscontrol 命令行上或用于创建或更新实例的 SQL Server Management Studio 对话框中提供参数值。但是,SQL Server Management Studio 只允许一个级别的参数替换。例如,仅当参数 B 本身不引用其他参数时,参数 A 才可以引用参数 B。

在 ICF 中定义参数默认值

可以在 ICF 的 ParameterDefaults 元素中提供 ICF 参数值。Notification Services 从该元素中读取参数名和参数值,然后使用指定值替换相应的参数。

例如,可以将参数用于多个元素共有的文件路径。可以将此参数命名为 BaseDirPath,并在 ICF 中创建下列元素:

<BaseDirectoryPath>%BaseDirPath%\Stock</BaseDirectoryPath>
...
<AssemblyName>%BaseDirPath%\SMS.dll</AssemblyName>

然后,可以提供 %BaseDirPath% 的值,如下所示:

<ParameterDefaults>
    <Parameter>
        <Name>BaseDirPath</Name>
        <Value>C:\NS</Value>
    </Parameter>
</ParameterDefaults>

创建或更新实例时,Notification Services 使用字符串“C:\NS”替换 ICF 中出现的每个 %BaseDirPath%。在逻辑上,这与在 ICF 中使用下列元素效果相同:

<BaseDirectoryPath>C:\NS\Stock</BaseDirectoryPath>
...
<AssemblyName>C:\NS\SMS.dll</AssemblyName>

创建和更新实例时定义参数值

如果要将参数值保存在 ICF 的外部,可以在创建或更新实例时或在环境变量中提供值。例如,如果使用 nscontrol 命令提示实用工具创建实例,则可在命令行上提供用户名和密码值。

在本例中,传递通道需要用户名和密码。由于您不希望将用户名和密码存储在 ICF 中,因此可使用以下参数:

<DeliveryChannel>
    <DeliveryChannelName>MyChannel</DeliveryChannelName>
    <ProtocolName>MyProtocol</ProtocolName>
    <Arguments>
        <Argument>
            <Name>UserName</Name>
            <Value>%User%</Value>
        </Argument>
        <Argument>
            <Name>Password</Name>
            <Value>%Pwd%</Value>
        </Argument>
    </Arguments>
</DeliveryChannel>

然后,可以在命令行上提供参数值:

nscontrol create -in "C:\NS\InstanceConfig.xml" User=<userName>
    Pwd=<enterStrongPasswordHere>

如果使用 SQL Server Management Studio 创建或更新实例,您也可以提供参数值。

参数值优先级

在创建或更新实例时,可以为 ParameterDefaults 部分中的同一参数(作为环境变量)定义值。因此,在参数值之间存在优先级:

  • 创建或更新实例时提供的参数值优先于在环境变量和 ParameterDefaults 部分中提供的值。
  • 环境变量优先于 ParameterDefaults 值。
  • ParameterDefaults 值的优先级最低。

将参数传递给 ADF

在 ICF 中,使用 Application 元素来说明实例承载的应用程序。Application 元素包含 Parameters 子元素。您可以使用此子元素来定义 ADF 的参数值。

例如,在 ADF 中,必须定义运行宿主事件提供程序、生成器和分发服务器的服务器。可以通过 ADF 中的 SystemName 元素完成此任务。如果在一台服务器上运行所有这些组件,并且要在创建实例时定义服务器名,则可以在 ADF 中使用以下参数:

<HostedProvider>
    ...
    <SystemName>%ApplicationServer%</SystemName>
...
<Generator>
    <SystemName>%ApplicationServer%</SystemName>
...
<Distributor>
    <SystemName>%ApplicationServer%</SystemName>

然后,可以在 ICF 的 Application 元素中定义该参数的值:

<Application>
    ...
    <Parameters>
        <Parameter>
            <Name>ApplicationServer</Name>
            <Value>Server01</Value>
        </Parameter>
    </Parameters>
</Application>

创建实例时,Notification Services 将使用值 Server01 替换 ADF 中出现的每个 %ApplicationServer%

您也可以在 ADF 的 ParameterDefaults 元素中提供 ADF 的参数值。

可以根据需要组合这些替换方法。例如,如果要对 ApplicationServer 值使用参数(如 %AppServer%),则可以在命令行上提供 %AppServer% 的值。

请参阅

概念

指定实例名
指定数据库系统名称
定义实例数据库
使应用程序和实例相关联
定义自定义传递协议
定义传递通道
配置参数加密
指定实例的版本和历史记录
使用应用程序定义文件 (ADF) 中的参数

其他资源

配置 Notification Services 实例
ParameterDefaults Element (ICF)
Parameters Element (ICF)
ParameterDefaults Element (ADF)
nscontrol 实用工具
定义 Notification Services 应用程序

帮助和信息

获取 SQL Server 2005 帮助