NodeCache 云解决方案提供商

NodeCache 配置服务提供程序用于管理客户端缓存。 此配置服务提供程序仅供企业管理服务器使用。 它提供一个抽象级别,将节点列表的管理与特定后备存储区分离。 它将客户端缓存与服务器端缓存同步。 它还提供用于监视设备端缓存更改的 API。

NodeCache 支持比较哈希值,而不是实际节点值:

<Type xmlns="syncml:metinf">
application/x-nodemon-sha256
</type>

NodeCache 将对值进行哈希处理,并与服务器向下发送的哈希值进行比较。 此过程支持递归检查父节点及其子节点。

以下列表显示了 NodeCache 配置服务提供程序节点:

Device/{ProviderID}

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}

每个 DM 服务器的组设置。 每组设置都由服务器的提供程序 ID 进行区分。 它应该是注册过程中通过 w7 APPLICATION 配置服务提供程序 XML 提供的相同 DM 服务器 PROVIDER-ID 值。 在 Windows Phone 8 中,仅支持一个企业管理服务器。 也就是说,NodeCache 下应只有一个 ProviderID 节点。

描述框架属性:

属性名 属性值
格式 node
访问类型 添加、删除、获取
动态节点命名 UniqueName:它应该是注册过程中通过 w7 APPLICATION 配置服务提供程序 XML 提供的同一 DM 服务器 PROVIDER-ID 值。

Device/{ProviderID}/CacheVersion

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/CacheVersion

表示服务器设置的缓存版本的字符串。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 添加、获取、替换

Device/{ProviderID}/ChangedNodes

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/ChangedNodes

其值与 /NodeID/ExpectedValue 中指定的预期值不匹配的节点列表。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 “获取”

Device/{ProviderID}/ChangedNodesData

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/ChangedNodesData

包含值与 /NodeID/ExpectedValue 中指定的预期值不匹配的节点的 XML。

描述框架属性:

属性名 属性值
格式 xml
访问类型 “获取”

Device/{ProviderID}/Nodes

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/Nodes

缓存节点的根节点。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”

Device/{ProviderID}/Nodes/{NodeID}

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}

有关每个缓存节点的信息存储在服务器指定的 NodeID 下。 此值不得包含逗号。

描述框架属性:

属性名 属性值
格式 node
访问类型 添加、删除、获取
动态节点命名 ServerGeneratedUniqueIdentifier
Device/{ProviderID}/Nodes/{NodeID}/AutoSetExpectedValue
范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}/AutoSetExpectedValue

这会自动将设备上的值设置为与节点的实际值匹配。 节点在 NodeURI 中指定。

描述框架属性:

属性名 属性值
格式 null
访问类型 添加、删除、获取
Device/{ProviderID}/Nodes/{NodeID}/ExpectedValue
范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}/ExpectedValue

这是服务器预期位于设备上的值。 当配置服务提供程序启动会话时,它会根据节点的实际值检查预期值。

支持的值为 string 和 x-nodemon-不存在。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 添加、删除、获取

示例

下面是将 ExpectedValue 设置为不存在的示例。

<Add>
   <CmdID>10</CmdID>
   <Item>
      <Target>
         <LocURI>./Device/Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0002/ExpectedValue</LocURI>
      </Target>
      <Meta>
         <Format xmlns="syncml:metinf">chr</Format>
         <Type xmlns="syncml:metinf">application/x-nodemon-nonexistent</Type>
      </Meta>
   </Item>
</Add>
Device/{ProviderID}/Nodes/{NodeID}/NodeURI
范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1511 [10.0.10586] 及更高版本
./Device/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}/NodeURI

此节点的值是完整的 OMA DM 节点 URI。 它可以在设备管理树中指定内部节点或叶节点。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 添加、删除、获取

User/{ProviderID}

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}

每个 DM 服务器的组设置。 每组设置都由服务器的提供程序 ID 进行区分。 它应该是注册过程中通过 w7 APPLICATION 配置服务提供程序 XML 提供的相同 DM 服务器 PROVIDER-ID 值。 在 Windows Phone 8 中,仅支持一个企业管理服务器。 也就是说,NodeCache 下应只有一个 ProviderID 节点。

描述框架属性:

属性名 属性值
格式 node
访问类型 添加、删除、获取
动态节点命名 UniqueName:它应该是注册过程中通过 w7 APPLICATION 配置服务提供程序 XML 提供的同一 DM 服务器 PROVIDER-ID 值。

User/{ProviderID}/CacheVersion

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/CacheVersion

表示服务器设置的缓存版本的字符串。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 添加、获取、替换

User/{ProviderID}/ChangedNodes

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/ChangedNodes

其值与 /NodeID/ExpectedValue 中指定的预期值不匹配的节点列表。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 “获取”

User/{ProviderID}/ChangedNodesData

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/ChangedNodesData

包含值与 /NodeID/ExpectedValue 中指定的预期值不匹配的节点的 XML。

描述框架属性:

属性名 属性值
格式 xml
访问类型 “获取”

User/{ProviderID}/Nodes

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/Nodes

缓存节点的根节点。

描述框架属性:

属性名 属性值
格式 node
访问类型 “获取”

User/{ProviderID}/Nodes/{NodeID}

范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}

有关每个缓存节点的信息存储在服务器指定的 NodeID 下。 此值不得包含逗号。

描述框架属性:

属性名 属性值
格式 node
访问类型 添加、删除、获取
动态节点命名 ServerGeneratedUniqueIdentifier
User/{ProviderID}/Nodes/{NodeID}/AutoSetExpectedValue
范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}/AutoSetExpectedValue

这会自动将设备上的值设置为与节点的实际值匹配。 节点在 NodeURI 中指定。

描述框架属性:

属性名 属性值
格式 null
访问类型 添加、删除、获取
User/{ProviderID}/Nodes/{NodeID}/ExpectedValue
范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}/ExpectedValue

这是服务器预期位于设备上的值。 当配置服务提供程序启动会话时,它会根据节点的实际值检查预期值。

支持的值为 string 和 x-nodemon-不存在。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 添加、删除、获取

示例

下面是将 ExpectedValue 设置为不存在的示例。

<Add>
   <CmdID>10</CmdID>
   <Item>
      <Target>
         <LocURI>./User/Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0002/ExpectedValue</LocURI>
      </Target>
      <Meta>
         <Format xmlns="syncml:metinf">chr</Format>
         <Type xmlns="syncml:metinf">application/x-nodemon-nonexistent</Type>
      </Meta>
   </Item>
</Add>
User/{ProviderID}/Nodes/{NodeID}/NodeURI
范围 版本 适用的操作系统
✅ 设备
✅ 用户
✅ 专业版
✅ 企业版
✅ 教育版
✅ Windows SE
✅ IoT 企业版/IoT 企业版 LTSC
✅Windows 10版本 1703 [10.0.15063] 及更高版本
./User/Vendor/MSFT/NodeCache/{ProviderID}/Nodes/{NodeID}/NodeURI

此节点的值是完整的 OMA DM 节点 URI。 它可以在设备管理树中指定内部节点或叶节点。

描述框架属性:

属性名 属性值
格式 chr (字符串)
访问类型 添加、删除、获取

使用 NodeCache 配置服务提供程序的典型 DM 会话

  1. 设备连接到 DM 服务器。
  2. 服务器通过为 ./Vendor/MSFT/ NodeCache /ProviderID/CacheVersion LocURI 发出 Get 操作来查询 NodeCache 版本
  3. 如果设备 CacheVersion 和服务器端缓存因设备崩溃或服务器崩溃) 而 (不同,则服务器可以清除服务器端缓存并转到步骤 5。
  4. 服务器更新服务器端缓存:
    1. 发送 ./Vendor/MSFT/NodeCache/ProviderID/ChangedNodes LocURI 的 Get 操作
    2. 响应是已更改节点 ID 的列表。 列表中的每个 ID 对应于 ./Vendor/MSFT/NodeCache/ProviderID/Nodes 根目录下的节点
    3. 对于无效节点列表中的每个节点,服务器会发送一个 GET 命令来检索节点的实际值。 例如, GET <NodeURI>其中 NodeURI 是对应于无效缓存节点的完整设备 LocURI。
    4. 使用从设备接收的实际值更新服务器端缓存中的节点。
    5. 对于每个更新的节点,都会向设备发送一个 REPLACE 命令来更新设备端缓存: REPLACE ./Vendor/MSFT/NodeCache/ProviderID/Nodes/NodeID/ExpectedValue => ActualValue
    6. 将创建一个新的缓存版本并将其发送到设备:REPLACE ./Vendor/MSFT/NodeCache/ProviderID/CacheVersion => new_versionnew_version 由服务器存储。
  5. 管理服务器从服务器端缓存中检索相应的值:
    1. 如果服务器端缓存中已存在某个值,请从服务器端缓存中检索该值,而不是转到设备。
    2. 如果服务器端缓存中不存在值,请执行以下任务:
      1. 在服务器端缓存中创建具有唯一 NodeID 的新条目。
      2. 查询设备以检索 URI 的实际值。
      3. 使用 NodeID 值在 ./Vendor/MSFT/NodeCache/ ProviderID /Nodes 下创建一个新节点。
      4. 为 ./Vendor/MSFT/NodeCache/ProviderID/Nodes/NodeID 节点设置 NodeURIExpectedValue
      5. 更新 CachedNodes 版本。

OMA DM 示例

创建节点缓存设置:

<Add>
   <CmdID>2</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1</LocURI>
      </Target>
      <Meta>
         <Format xmlns="syncml:metinf">node</Format>
      </Meta>
   </Item>
</Add>
<Add>
   <CmdID>4</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001</LocURI>
      </Target>
      <Meta>
         <Format xmlns="syncml:metinf">node</Format>
      </Meta>
   </Item>
</Add>
<Add>
   <CmdID>5</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001/NodeURI</LocURI>
      </Target>
      <Data>./Vendor/MSFT/DeviceLock/Provider/MDMSRV1/DevicePasswordEnabled</Data>
   </Item>
</Add>
<Add>
   <CmdID>6</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001/ExpectedValue</LocURI>
      </Target>
      <Data>0</Data>
   </Item>
</Add>
<Add>
   <CmdID>8</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0002</LocURI>
      </Target>
      <Meta>
         <Format xmlns="syncml:metinf">node</Format>
      </Meta>
   </Item>
</Add>
<Add>
   <CmdID>9</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0002/NodeURI</LocURI>
      </Target>
      <Data>
         ./Vendor/MSFT/DeviceLock/Provider/MDMSRV1/AlphanumericDevicePasswordRequired
      </Data>
   </Item>
</Add>
<Add>
   <CmdID>10</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0002/ExpectedValue</LocURI>
      </Target>
      <Data>0</Data>
   </Item>
</Add>

获取提供程序 ID 下的节点MDMSRV1、缓存版本、更改的节点、节点、预期值:

<Get>
   <CmdID>18</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1</LocURI>
      </Target>
   </Item>
</Get>
<Get>
   <CmdID>19</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/CacheVersion</LocURI>
      </Target>
   </Item>
</Get>
<Get>
   <CmdID>20</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/ChangedNodes</LocURI>
      </Target>
   </Item>
</Get>
<Get>
   <CmdID>21</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001</LocURI>
      </Target>
   </Item>
</Get>
<Get>
   <CmdID>22</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001/ExpectedValue</LocURI>
      </Target>
   </Item>
</Get>

替换缓存版本、节点 URI 和预期值:

<Replace>
   <CmdID>2</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/CacheVersion</LocURI>
      </Target>
      <Data>SCCM0001@!Replace</Data>
   </Item>
</Replace>
<Replace>
   <CmdID>2</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001/NodeURI</LocURI>
      </Target>
      <Data>./Vendor/MSFT/DeviceLock/DeviceValue/AllowSimpleDevicePassword</Data>
    </Item>
</Replace>
<Replace>
   <CmdID>2</CmdID>
   <Item>
      <Target>
         <LocURI>./Vendor/MSFT/NodeCache/MDMSRV1/Nodes/Node_0001/ExpectedValue</LocURI>
      </Target>
      <Data>2</Data>
   </Item>
</Replace>

对于 AutoSetExpectedValue,使用空数据的替换操作将查询 ./DevDetail/Ext/Microsoft/DeviceName。

<Add>
    <CmdID>2001</CmdID>
    <Item>
        <Target>
            <LocURI>./Vendor/MSFT/NodeCache/MDM%20SyncML%20Server/Nodes/20</LocURI>
        </Target>
        <Meta>
            <Format xmlns="syncml:metinf">node</Format>
        </Meta>
    </Item>
</Add>
<Add>
    <CmdID>2002</CmdID>
    <Item>
        <Target>
            <LocURI>./Vendor/MSFT/NodeCache/MDM%20SyncML%20Server/Nodes/20/NodeURI</LocURI>
        </Target>
        <Data>./DevDetail/Ext/Microsoft/DeviceName</Data>
    </Item>
</Add>
<Replace>
    <CmdID>2003</CmdID>
    <Item>
        <Target>
            <LocURI>./Vendor/MSFT/NodeCache/MDM%20SyncML%20Server/Nodes/20/AutoSetExpectedValue</LocURI>
        </Target>
        <Data></Data>
    </Item>
</Replace>

上的 ./Vendor/MSFT/NodeCache/MDM%20SyncML%20Server/Nodes/20/ExpectedValue Get 操作返回调用自动集时的设备名称。

对 ChangedNodesData 执行 Get 操作将返回编码的 XML。 下面是一个示例:

<Nodes><Node Id="10" Uri=""></Node><Node Id="20" Uri="./DevDetail/Ext/Microsoft/DeviceName">U09NRU5FV1ZBTFVF</Node></Nodes>

它表示此示例:

<Nodes>
    <Node Id="10" Uri=""></Node>
    <Node Id="20" Uri="./DevDetail/Ext/Microsoft/DeviceName">U09NRU5FV1ZBTFVF</Node>
</Nodes>

ID 是 MDM 服务器添加的节点 ID,Uri 是节点跟踪的路径。 如果未设置 URI,则节点将始终报告为已更改,如节点 ID 10 中所示。

节点标记内的值是 Uri 返回的实际值,这意味着对于 Node ID 20,DeviceName 与之前的预期不匹配,并且设备名称现在U09NRU5FV1ZBTFVF而不是以前的名称。

配置服务提供程序参考