TR-069第一期第六修正版-14
3.5 使用SOAP-3
故障响应只能作为对SOAP请求的响应而发送。不能发送故障响应来响应SOAP响应或其他故障响应。
如果故障响应不符合上述所有要求,则接收方必须认为SOAP消息无效。第3.7节描述了无效SOAP对CPE WAN管理协议会话的影响。
- 在处理收到的信封时,(若存在下面的情况),ACS和CPE都可以忽略:(a)SOAP Body 及其子元素或内容中出现任何未知XML元素,(注意,除了接收到调用不受支持的RPC方法的SOAP请求必须导致SOAP层错误响应,错误代码为“Method not Supported”(错误代码8000或9000)。)(b)任何未知的XML属性及其值,(c)任何嵌入的XML注释,以及(d)任何XML处理指令。或者,ACS和CPE可以显式地验证接收到的XML,并拒绝包含未知元素的信封。请注意,这会阻止在不更改消息名称的情况下通过包含附加参数来扩展现有消息。
- 如果RPC方法需要引用XML模式名称空间namespaces(例如“type”属性或XML模式数据类型的引用),则这些引用必须是这些名称空间namespaces定义的2001版本,http://www.w3.org/2001/XMLSchema-instance和http://www.w3.org/2001/XML-Schema。接收方可能会拒绝引用这些名称空间namespaces的不同版本的RPC方法。
按照上文描述编码的RPC方法,GetParameterNames请求将被编码为:
<soap-env:Envelope
xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
<soap-env:Header>
<cwmp:ID soap-env:mustUnderstand="1">0</cwmp:ID>
</soap-env:Header>
<soap-env:Body>
<cwmp:GetParameterNames>
<ParameterPath>Object.</ParameterPath>
<NextLevel>0</NextLevel>
</cwmp:GetParameterNames>
</soap-env:Body>
</soap-env:Envelope>
注意-在上面的示例中,使用的XML名称空间前缀只是示例。实际的名称空间前缀值是任意的,仅用于引用名称空间声明。
注意-CWMP名称空间前缀仅为在CWMP架构顶层定义的元素定义(上例中为ID和GetParameterNames)。在这些元素中包含的元素(上例中的ParameterPath和NextLevel)上指定名称空间是不正确的。这是因为CWMP模式指定的elementFormDefault值为“unqualified”。
注意-在上述示例中,CWMP名称空间标识符“urn:dslforum org:CWMP-1-0”只是一个示例,不一定是本规范定义的名称空间。
CWMP定义了一组SOAP Header元素,如下表4.
表4-SOAP Header Elements
标签名 | 描述 |
---|---|
ID | 该header标签可用于将SOAP请求和响应关联起来。每个请求都有唯一标识符,对应的响应包含匹配的标识符。标识符的值是一个任意字符串,由请求者自行设置。如果在SOAP请求中使用,ID必须出现在匹配的响应中(无论响应是成功还是失败)。 如要支持此标签,必须将此header标签的mustUnderstand属性设置为“1” (true)。 |
HoldRequests | 该header标签可能出现在从ACS发送到CPE的SOAP信封中,以调节来自CPE的请求的传输。此标题不得出现在从CPE发送到ACS的信封中。此标签的布尔值为“0”(false)或“1”(true)。如果标记不存在,则等同于“0”(false)。第3.7.1.3节定义了CPE在接收到该报头时的行为。需要CPE支持此标签。 如要支持此标签,必须将此header标签的mustUnderstand属性设置为“1” (true)。 不推荐使用此标头,因为这将使协议和CWMP会话流复杂化,而且不必要。 |
SessionTimeout | 该header标签可能出现在CWMP会话启动期间从CPE发送到ACS的SOAP信封中,仅用于提供可接受的CWMP会话超时持续时间的建议。此header标签不得出现在从ACS发送到CPE的信封中。此header标签也不得出现在SOAP正文不包含CWMP Inform请求的信封中。SessionTimeout是一个整数,表示ACS判断CPE是否响应超时的秒数。建议SessionTimeout为30秒或更长时间。 由于对该header标签的支持是可选的,因此必须将该header标签的mustUnderstand属性设置为“0”(false)。 |
SupportedCWMPVersions | 在CWMP会话启动期间,该header标签必须包含在CPE发送给ACS的SOAP信封中,其唯一目的是向ACS提供CPE支持的CWMP版本列表。支持CWMP 1.3版(或更早版本)的CPE不能发送此标头。此header标签不得出现在从ACS发送到CPE的信封中。此header标签也不得出现在SOAP正文不包含CWMP Inform请求的信封中。SupportedCWMPVersions值是以逗号分隔的CWMP版本列表。发布时的现有版本为1.0、1.1、1.2、1.3和1.4。 由于对该header标签的支持是可选的,因此必须将该header标签的mustUnderstand属性设置为“0”(false)。 |
UseCWMPVersion | 当且仅当Inform请求中包含SupportedCWMPVersionsheader标签且ACS支持SupportedCWMPVersions时,该报头必须包含在CWMP会话启动期间从ACS发送给CPE的SOAP信封中,其唯一目的是向CPE提供所选CWMP版本。 此header标签不得出现在从CPE发送到ACS的信封中。此header标签也不得出现在SOAP正文不包含CWMP InformResponse的信封中。 UseCWMPVersion值必须是单个版本,从与通知请求一起发送的SupportedCWMPVersions中的列表中选择。 因为只有当CPE发送SupportedCWMPVersions时才会发送此标头,所以必须将此标头的mustUnderstand属性设置为“1”(true)。 |
下面两个消息展示了一些保留的Header的使用方式
CPE到ACS
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cwmp="urn:dslforum-org:cwmp-1-2">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID>
<cwmp:SessionTimeout soap:mustUnderstand="0">40</cwmp:SessionTimeout>
</soap:Header>
<soap:Body>
<cwmp:Action>
<argument>value</argument>
</cwmp:Action>
</soap:Body>
</soap:Envelope>
ACS到CPE
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cwmp="urn:dslforum-org:cwmp-1-2">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">1234</cwmp:ID>
</soap:Header>
<soap:Body>
<cwmp:Action>
<argument>value</argument>
</cwmp:Action>
</soap:Body>
</soap:Envelope>
注意-在上面的示例中,使用的XML名称空间前缀只是示例。实际的名称空间前缀值是任意的,仅用于引用名称空间声明。
注意-在上述示例中,CWMP名称空间标识符“urn:dslforum org:CWMP-1-2”只是一个示例,不一定是本规范定义的名称空间。