使用应用程序定义文件 (ADF) 中的参数
如果在 XML 应用程序定义文件 (ADF) 中定义 Notification Services 应用程序,则可使用相应参数使 ADF 更安全、更便于移植和易于更新。您还可以将值从实例配置文件 (ICF) 传递到 ADF。
如果通过编程方式定义应用程序,则不存在参数对象。如果需要在一个位置更新应用程序的值,可使用变量。
Notification Services 参数
Notification Services 允许使用参数代替元素值。使用参数非常有益,这有以下几种原因:
- 可以不在应用程序定义中包含敏感数据,而仅在创建或更新应用程序时提供值。
- 可以定义一次参数值并在多个元素中使用它。
- 通过将可能更改的值放在一个位置,可以使实例和应用程序更易于更新。
在 ADF 中,要替换的参数如下所示:%MyParam%
。这是两边带有百分比字符的参数名称,与环境变量相似。在定义参数的值时,请指定参数的名称 (MyParam
) 和值(如 MyServer
)。与环境变量相似,参数名称不区分大小写。
在创建或更新应用程序时,Notification Services 使用您指定的值 (MyServer
) 替换参数 (%MyParam%
)。
对于 ADF,可以在 ADF 的 ParameterDefaults 元素中提供参数值,通过在 ICF 的 Application 部分中定义参数名称和值,可以将这些值从 ICF 传递到应用程序。
重要提示: |
---|
如果在 ADF 或 ICF 中使用了参数,但在创建或更新实例时没有提供参数的值,则创建或更新进程会失败。 |
在 ADF 中定义参数默认值
可以在 ADF 的 ParameterDefaults 元素中提供 ADF 参数的值。Notification Services 将从该元素中读取参数的名称和值,然后使用指定值替换相应的参数。
例如,可将一个参数用作多个元素的共同文件路径。可将该参数命名为 BaseDirPath
,然后在 ADF 中创建下列元素:
<BaseDirectoryPath>%BaseDirPath%\Stock</BaseDirectoryPath>
...
<AssemblyName>%BaseDirPath%\MyContentFormatter.dll</AssemblyName>
然后,提供 %BaseDirPath%
的值,如下所示:
<ParameterDefaults>
<Parameter>
<Name>BaseDirPath</Name>
<Value>C:\NS</Value>
</Parameter>
</ParameterDefaults>
在创建或更新实例时,Notification Services 会使用字符串“C:\NS”替换出现的每个 %BaseDirPath%
。这与在 ADF 中使用下列元素在逻辑上是相同的:
<BaseDirectoryPath>C:\NS\Stock</BaseDirectoryPath>
...
<AssemblyName>C:\NS\SMS.dll</AssemblyName>
从 ICF 传递参数
在 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 和 ICF 之中,则可在创建或更新实例时提供这些值或者在环境变量中提供这些值。例如,如果使用 nscontrol 命令提示实用工具创建 Notification Services 实例,则可在命令行上提供用户名和密码值。
若要将这些值传递给 ADF,则必须使用 ICF 的 Application 部分中的参数。还是使用上面的示例,但这次不是在 ICF 中定义应用程序服务器,而是使用参数 %Server%
,如以下代码所示:
<Application>
...
<Parameters>
<Parameter>
<Name>ApplicationServer</Name>
<Value>%Server%</Value>
</Parameter>
</Parameters>
</Application>
然后,在命令行上提供该参数的值:
nscontrol create -in "C:\NS\InstanceConfig.xml" Server=Server01
在创建或更新实例时,值 Server01 将替换 ICF 中的 %Server%
。然后,Server01 将替换 ADF 中出现的所有 %ApplicationServer%
。
也可以在使用 SQL Server Management Studio 创建和更新 Notification Services 实例时将参数传递到 ADF。不过,SQL Server Management Studio 仅允许一层参数替换。例如,只有参数 B 本身没有引用另一参数时,参数 A 才能引用参数 B。
参数值优先级
在创建或更新实例时,可以为 ParameterDefaults 部分中与环境变量相同的参数定义值。因此,不同的参数值具有不同的优先级:
- 创建或更新实例时提供的参数值具有最高优先级,并将覆盖环境变量和 ParameterDefaults 部分中提供的值。
- 环境变量将覆盖 ParameterDefaults 值。
- ParameterDefaults 值的优先级最低。
请参阅
概念
其他资源
ParameterDefaults Element (ADF)
Parameter Element (ADF)
ParameterDefaults Element (ICF)
nscontrol 实用工具
定义 Notification Services 应用程序
配置 Notification Services 实例