DPWS 规范符合性

本主题介绍 WSDAPI 如何实现 Web 服务设备配置文件 (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 建议不应发送大于最大传输单元 (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 将允许客户端和设备对其设备终结点使用 URI 以外的 urn:uuid 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。 未定义在接收内容传输编码未设置为“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 支持 WS-Discovery 中定义的所有范围匹配规则,LDAP 除外。 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 将仅提供 wsx:Metadata SOAP 信封正文中的 元素。 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

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

DPWS 5.4 WS-Policy

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

DPWS 6.0 事件

DPWS 6.1 订阅

DPWS 需要支持推送传递。 WSDAPI 在服务端实现推送传递,因此符合 R3009 和 R3010,并且仅在客户端接受推送传递模式。 如果服务无法识别 或 EndTo 地址,则 R3017 和 R3018 需要服务的特定NotifyTo故障。 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 中定义的常量。