网站建设表格代码做销售在哪个网站找客户
文章目录
- 第四十九章 解决 IRIS 中的 SOAP 问题 - 发送消息时出现问题
第四十九章 解决 IRIS 中的 SOAP 问题 - 发送消息时出现问题
如果在向 IRIS Web 服务或客户端发送或接收 SOAP 消息时遇到问题,请考虑以下常见场景列表:
SOAP消息可能包含极长的字符串或二进制值,超出字符串长度限制。在这种情况下,IRIS会抛出以下错误之一:<MAXSTRING>错误- 数据类型验证错误(也可能有其他原因):
ERROR #6232: Datatype validation failed for tag your_method_name ...
当向导读取 WSDL 时,它假定任何字符串类型的输入或输出都可以在 IRIS 中表示为 %String。同样,它假定任何 XML 类型为 base64Binary 的输入或输出都可以在 IRIS 中表示为 %xsd.base64Binar。WSDL 中没有信息来告知 SOAP 向导此输入或输出可能超出字符串长度限制。
Web服务或客户端可能会收到WS-Security标头,但尚未配置为识别它们。这可能会导致类似以下的一般错误:
<ZSOAP>zInvokeClient+269^%SOAP.WebClient.1
此类错误也可能有其他原因。如果收到此类错误,请首先检查消息是否包含 WS-Security 标头;如果是,请将以下内容添加到 Web 服务或客户端并重新编译:
Parameter SECURITYIN="REQUIRE";
此外,如果 生成了安全策略(在配置类中),可能需要编辑该策略以提供缺失的详细信息;请参阅编辑生成的策略。如果不这样做,可能会收到如上所述的一般错误。
-
根据
SOAP规范,Web服务或客户端可能需要比应有的更具体的消息格式。(对于IRIS中没有的服务或客户端,可能会发生这种情况。) 遇到过以下情况,此处按(大约)最常见到最不常见的顺序列出:Web服务或客户端要求消息为消息中的所有元素指定xsi:type属性。要指定此属性的使用,请参阅控制xsi:type属性的使用,该属性适用于Web服务和客户端。- 对于空字符串值,
Web服务或客户端需要空元素(而不是省略元素)。要解决此问题,可以控制空字符串参数的形式,请参阅控制空字符串参数的形式,该内容适用于Web服务和客户端。 Web服务或客户端需要特定的命名空间前缀。IRIS不提供指定命名空间前缀的方法。
但是,对于
SOAP信封,您可以指定要使用的前缀。请参阅指定SOAP信封前缀,它适用于Web服务和客户端。-
Web客户端要求引用SOAP操作。要解决此问题,请参阅引用SOAP操作(仅限SOAP 1.1)。 -
Web服务或客户端要求在每个SOAP消息的开头添加BOM(字节顺序标记)。由于SOAP消息采用UTF-8编码,不存在字节顺序问题,因此不需要BOM。请参阅向SOAP消息添加字节顺序标记,该内容适用于Web服务和客户端。
这些问题的症状取决于所使用的第三方产品。
-
Web服务或客户端可能不符合WSDL。对于IRIS Web服务或客户端来说,这种情况不应该发生,但在其他情况下可能会发生。InterSystems已经看到过以下情况:- 消息中的元素不在
WSDL所需的命名空间中。 - 消息中元素的顺序与
WSDL不一致。
要确定服务或客户端是否符合
WSDL,请将消息与WSDL进行比较。或者,对于第三方
Web服务,要确定该Web服务是否符合WSDL,执行以下操作会很有用:-
使用第三方工具生成
Web客户端。 -
从该
Web客户端发送消息:- 如果成功,则很可能
Web服务确实期望并发送与其WSDL一致的消息,而问题的原因在其他地方。在这种情况下,将此客户端发送的消息与IRIS客户端发送的消息进行比较。 - 如果不成功,则可能是
Web服务不期望或不发送与其WSDL一致的消息。
- 如果成功,则很可能
- 消息中的元素不在
-
Web服务或客户端可能会发送 不支持的格式的消息。检查正在使用的WSDL并确保它在IRIS中受支持很有用;请参阅使用WSDL。请注意,这些详细信息在IRIS中会随时间而变化。
