DPWS 规范符合性

本主题介绍 WSDAPI 如何在 Web Services (DPWS) 规范的 设备配置文件中实现选择性功能。 它还介绍了 WSDAPI 实现中省略了哪些 DPWS 功能。

DPWS 规范提供与设备消息的一致方式。 它还添加了特定的限制和建议,以简化在嵌入式硬件上支持 Web 服务的过程。

DPWS 规范在给定的实现建议或限制中使用术语 MAY 或 SHOULD 来描述选择性功能。 省略的功能可能是 DPWS 规范中未由 WSDAPI 实现的必需功能,或者 WSDAPI 在 DPWS 规范中指定的方法中实现的功能。

本主题按部分遵循 DPWS 部分的布局。 每个部分介绍了 WSDAPI 实现如何处理特定的限制、要求和选择性功能。 本主题最适合与 DPWS 规范一起阅读。

DPWS 3.0 消息传送

DPWS 3.1 URI 格式

R0025 和 R0027 的限制将 URI 限制为MAX_URI_SIZE八进制数。 WSDAPI 按指定强制执行这两项限制。

DPWS 3.2 UDP 消息传送

建议 R0029 建议不应发送大于 UDP 的最大传输单元(MTU)的 UDP 数据包。 WSDAPI 不实现此建议,并允许实现发送和接收大于 MTU 的发现消息。

DPWS 3.3 HTTP 消息传送

R0001 要求服务支持分块传输。 WSDAPI 接受请求消息中的分块数据,并将在请求消息中发送分块数据。

R0012 和 R0013 描述了 SOAP HTTP 绑定的必需部分。 对于 R0012,WSDAPI 实现 SOAP HTTP 绑定,但在 WSDAPI 完成发送 HTTP 请求之前,不会开始读取 HTTP 响应。 WSDAPI 在 R0013 中实现所需的消息交换模式,在 R0014 中实现可选的响应 SOAP 节点,并且未在 R0015 中实现可选的 Web 方法功能。 WSDAPI 还支持 R0030 和 R0017 中的要求。

DPWS 3.4 SOAP 信封

WSDAPI 支持 R0034,默认情况下强制实施 R0003 和 R0026。 更具体地说,根据 R0003 和 R0026,如果 WSDAPI 收到大于通过 HTTP MAX_ENVELOPE_SIZE的 SOAP 信封,则会拒绝连接并关闭连接。

DPWS 3.5 WS-Addressing

R0004 反映了建议在 WSDAPI 中使用设备 API,并且受 WSDAPI 中的客户端 API 支持。 由于这是一项建议,因此 WSDAPI 将允许客户端和设备在其设备终结点上使用除 urn:uuid URI 以外的 URI,以确保最大兼容性。 由于 WSDAPI 中的设备 API 不会在初始化之间保持状态,因此由应用程序开发人员使用 WSDAPI 中的设备 API 来确保正确支持 R0005 和 R0006。 WSDAPI 中的客户端 API 将假定设备标识是唯一的且持久化,并且基于 WSDAPI(如 PnP-X)中的客户端 API 构建的功能需要这样才能在设备重启时正确识别设备。

R0007 建议在终结点引用中使用引用属性。 WSDAPI 仍将识别并接受具有引用属性的终结点,开发人员可以选择使用它们,但默认情况下,WSDAPI 不会在创建终结点中填充它们。 同样,使用 R0042,当 WSDAPI 创建服务终结点时,它将使用 HTTP 或 HTTPS 传输地址,但不要求设备在其服务终结点中使用 HTTP 或 HTTPS 传输地址。 尝试与不使用 HTTP 或 HTTPS 的服务通信时客户端的行为未定义。

在错误时,R0031 会约束回复终结点,并描述如果错误不是匿名的,则发送的错误。 WSDAPI 强制回复终结点在发送消息时使用正确的值,如果 WSDAPI 收到具有错误回复终结点的请求消息,则错误。 如果回复终结点无效,R0041 为实现提供删除错误的选项。 WSDAPI 不会删除故障,而是将故障发回到发送到匿名终结点的请求通道,作为与客户端通信的“最大努力”。

最后,对 SOAP 标头 R0019 和 R0040 有两个限制,其中 WSDAPI 遵守并强制实施接收的消息。

DPWS 3.6 附件

WSDAPI 支持附件并符合 R0022。 WSDAPI 还符合 R0037。 发送附件时,WSDAPI 将始终将所有 MIME 部件的内容传输编码设置为“二进制”。 但是,WSDAPI 不强制实施 R0036。 收到 MIME 部件且内容传输编码未设置为“binary”的 MIME 部件时,WSDAPI 的行为未定义。

DPWS 还定义 MIME 部件排序子句。 对于 R0038,如果 SOAP 信封不是第一个 MIME 部分,WSDAPI 将强制实施部分排序,并且会拒绝 MIME 消息。 对于 R0039,WSDAPI 始终将 SOAP 信封作为第一个 MIME 部分发送。

DPWS 4.0 发现

R1013 和 R1001 区分设备发现和服务发现。 WSDAPI 符合 R1013。 托管实现符合 R1001,但 WSDAPI 不会在客户端上强制实施此建议。

DPWS 还提供有关类型和范围匹配规则的指导。 WSDAPI 支持除 LDAP 之外 WS-Discovery 中定义的所有范围匹配规则。 WSDAPI 还提供一个可扩展模型,用于定义自定义范围匹配规则,从而符合 R1019。 托管 API 还会始终为每个 R1020 提供发现中的 wsdp:Device 类型,但客户端 API 不需要它存在。 基于 WSDAPI(如 PnP-X)构建的其他应用程序确实对发现中存在的 wsdp:Device 类型具有硬性要求。

为了便于发现和绑定,WSDAPI 支持 R1009 和 R1016。 根据 R1018,WSDAPI 将忽略未发送到匿名地址的多播 UDP。 R1015、R1021 和 R1022 定义探测消息的 HTTP 绑定,WSDAPI 支持该消息。

DPWS 5.0 说明

WSDAPI 在客户端上强制实施 R2044。 在宿主端,WSDAPI 只会在 SOAP 信封正文中提供 wsx:Metadata 元素。 R2045 允许设备支持一部分 WS 传输 功能。 宿主 API 将始终生成 wsa:ActionNotSupported 错误。

DPWS 5.1 特征

DPWS 描述了设备的基本特征。 除了本主题中所述的限制外,还为特定字符串和 URI 定义了长度限制。 WSDAPI 在此 DPWS 第 5.1 节中强制实施长度限制,无论是发送消息还是分析消息内容之后。

DPWS 还介绍了所需的元数据部分和元数据版本的循环。 客户端实现强制实施 ThisModel 和 ThisDevice 元数据的存在。 托管实现还正确管理元数据版本,并始终提供这些部分,符合 R2038、R2012、R2001、R2039、R2014 和 R2002。

DPWS 5.2 托管

本部分介绍服务和关系元数据的层次结构。 WSDAPI 不会强制实施 ServiceId 的唯一性,如客户端或设备端的本节中所述。

WSDAPI 确实符合 R2040,如果没有任何托管服务,则宿主实现可能会发送元数据响应,且没有关系节。 客户端实现正确接受元数据响应。

R2029 允许元数据响应中的多个关系部分,WSDAPI 将正确接受这些部分。 R2030 和 R2042 描述元数据版本的管理,该版本在托管 API 中正确实现。

DPWS 5.3 WSDL

如果服务提供 Web 服务描述语言(WSDL)数据,客户端实现可以获取服务定义并即时作服务。 这由后期绑定客户端使用。 WSDAPI 客户端实现将接受从服务提供的 WSDL,但客户端不会验证它,并且客户端不提供后期绑定编程模型。 宿主实现可用于提供 WSDL,但主机不需要这样做,因为服务级别元数据不是由主机本身管理的。

DPWS 5.4 WS-Policy

DPWS 描述要用于设备的策略断言。 由于 WSDAPI 不提供且不解释 WSDL,因此无法识别并强制实施嵌入在 WSDL 数据中的策略。

DPWS 6.0 事件

DPWS 6.1 订阅

DPWS 需要支持推送传递。 WSDAPI 在服务端实现推送传递,从而符合 R3009 和 R3010,并且仅接受客户端上的推送传递模式。 如果 R3017 和 R3018 无法识别 NotifyToEndTo 地址,则需要服务的特定故障。 WSDAPI 不会预先验证这些地址,也不会生成这些错误。 但是,客户端实现将正确识别这些错误。 同样,R3019 是可选的,WSDAPI 不实现此建议,但客户端实现将正确识别 SubscriptionEnd 消息,并通知应用程序传递失败。

DPWS 6.1.1 筛选

WSDAPI 符合 R3008 并实现 Action 筛选器。 符合 R3011 和 R3012,WSDAPI 不会在规定条件下生成故障。 如果 WSDAPI 无法识别其要求筛选的作,则 WSDAPI 还会实现描述的 R3020 故障。

DPWS 6.2 订阅持续时间和续订

WSDAPI 符合 R3005、R3006 和 R3016。 WSDAPI 将始终使用 xs:duration,但会接受 xs:dateTime(如果提供),因此不会在 R3013 中发出可选故障。 WSDAPI 支持 GetStatus,并且不会为每个 R3015 发出 wsa:ActionNotSupported 故障。 如果服务响应 GetStatus 请求,WSDAPI 将接受 wsa:ActionNotSupported 错误。

DPWS 7.0 安全性

DPWS 描述了适用于设备的推荐安全模型。 WSDAPI 未如前所述实现这些建议,并且不执行本部分中的限制,如前所述。

DPWS 附录 I

DPWS 将其他规范中的全局常量修正为适合设备。 WSDAPI 使用本节中的常量,并用这些常量替代 WS-Discovery 实现中的默认常量。 使用 WSDAPI 进行 WS-Discovery 的应用程序将绑定到 DPWS 中定义的常量,而不是 WS-Discovery中定义的常量。