由于WSDL为类型定义指定了一个部分,我想知道如何强制执行这种类型定义,以便当消息内容与请求的类型不匹配时,消息交换将失败。
根据我所读到的,Web服务可以在没有WSDL的情况下存在(只需快速搜索“没有wsdl的Web服务”)。这不是一个理想的情况,但它可能会发生,只要消费者知道消息的结构,Web服务仍然可以使用。如果这是真的,那么WSDL中定义的类型只是提供信息,不是吗?似乎没有一种自动机制将WSDL的类型定义与实际类型验证绑定在一起。似乎WSDL documentation在这方面也没有说什么。
如何在Web服务中强制执行类型验证?服务器是否有责任提供此类验证并在出现问题时返回失败消息?在类型验证方面,客户的责任是什么?
答案 0 :(得分:1)
WSDL描述服务,部分服务描述是客户端和服务之间交换的数据的定义。数据由XML模式(XSD)描述,它定义了每条消息的确切格式(除了一些罕见的用例,例如使用xsd:any
定义)。 XML模式是描述XML文档的标准方法,它们用于验证这些文档 - 常见的XML解析器允许您使用指定的模式验证XML文档。
您可以在没有WSDL的情况下创建Web服务 - 实际上WSDL主要用于SOAP服务,但即使SOAP服务也可以在没有WSDL的情况下定义,但它们仍然只能使用可由XSD模式描述的定义良好的数据。其他类型的Web服务(如XML服务或REST服务(传递XML))也可以交换XSD描述的数据。
如果使用验证,则取决于消费者。验证XML文档可能非常耗时,并且可能会降低系统的吞吐量。验证的使用方式取决于API - 一些API或工具提供了开箱即用的功能,其他需要手动拦截收到的消息并使用一些可用的XML解析器运行验证。