有没有人在一次kmip请求中使用过定位和获取操作,因为很难同时操作,所以我得到了一个错误。正如您所看到的,我正在向我的服务器发送kmip请求。
<RequestMessage>
<RequestHeader>
<ProtocolVersion>
<ProtocolVersionMajor type="Integer" value="1"/>
<ProtocolVersionMinor type="Integer" value="2"/>
</ProtocolVersion>
<Authentication>
<Credential>
<CredentialType type="Enumeration" value="UsernameAndPassword"/>
<CredentialValue>
<Username type="TextString" value="vijans"/>
<Password type="TextString" value="asdf1234"/>
</CredentialValue>
</Credential>
</Authentication>
<BatchOrderOption type="Boolean" value="1"/>
<BatchCount type="Integer" value="2"/>
</RequestHeader>
<BatchItem>
<Operation type="Enumeration" value="Locate"/>
<UniqueBatchItemID type="ByteString" value="31303030303031"/>
<RequestPayload>
<Attribute>
<AttributeName type="TextString" value="Name"/>
<AttributeValue>
<NameValue type="TextString" value="new_ss_nv"/>
<NameType type="Enumeration" value="UninterpretedTextString"/>
</AttributeValue>
</Attribute>
</RequestPayload>
</BatchItem>
<BatchItem>
<Operation type="Enumeration" value="Get"/>
<UniqueBatchItemID type="ByteString" value="31303030303032"/>
<RequestPayload/>
</BatchItem>
</RequestMessage>这是无效的,因为get操作不会使用唯一的identifier.can来帮助某人?
发布于 2018-11-25 01:42:46
您的KMIP服务器必须实现ID占位符机制。它是一个临时的唯一标识符变量,用于缓存请求中批处理项之间的标识符(请参阅规范中的Client-to-Server Operations部分)。
您可以查看每个操作如何使用或保存此ID占位符。摘自Locate operation
服务器返回找到的对象的唯一标识符列表,然后可以使用Get操作检索该列表。……如果向客户端返回一个唯一标识符,则服务器应将此操作返回的唯一标识符复制到ID占位符变量中。如果定位操作与多个对象匹配,并且请求中省略了最大项值,或者将其设置为大于1的值,则服务器应清空ID占位符,从而导致与定位一起批处理且未显式指定唯一标识符的任何后续操作失败。
在Get操作中,Get Request Payload table指定不需要唯一标识符,并对此进行描述:
如果省略,则服务器将ID占位符值用作唯一标识符。
然后,对于定位操作,如果定位结果只有一个唯一标识符,则服务器必须缓存ID占位符中的值(独立于下一个操作),否则它必须清空ID占位符。
最后,对于Get操作,如果请求中没有定义唯一标识符,则服务器必须使用ID占位符进行操作。如果ID占位符为空,则操作一定会失败,并返回类似于"Invalid Field“的结果(我不确定结果原因,但这对我来说是有意义的)。
https://stackoverflow.com/questions/53369284
复制相似问题