是否必须使用?wsdl访问WSDL定义?

时间:2013-10-11 06:12:28

标签: web-services wsdl

Web服务是否应通过将?wsdl附加到端点地址来提供WSDL的任何标准强制要求?

如果WSDL托管在不同的URL(没有附加?wsdl),是否可以?

例如:

Endpoint: http://abc.xyz.com/MyService
WSDL:     http://abc.xyz.com/MyServiceDefinition.pqr

请注意,我甚至为WSDL定义使用了不同的扩展名。

使用这种方法是否违反任何标准,或者可以按照他们想要的方式托管事物?

2 个答案:

答案 0 :(得分:2)

  

是否必须使用?wsdl

访问WSDL定义

不,不是。

WSDL用于描述Web服务契约,因为它允许工具自动生成客户端存根代码以调用指定的Web服务。将WSDL暴露在与附加?wsdl的Web服务相同的位置,这非常方便,这是每个人都使用的约定

人员和工具在该位置查找WSDL,框架会自动在该位置公开它,但它只是一个约定。据我所知,这并没有在任何规范中指明(或者至少我没有找到)。

有时虽然您不想提供每个人都可以查看并尝试创建客户端的WSDL,因为它是一个私有Web服务,您只想访问您的合作伙伴,而不是每个人。此时,您可以禁用?wsdl URL,并通过使用备用渠道仅向您的合作伙伴提供WSDL。如果您不希望它在线公开,您甚至可以通过电子邮件发送它。

所以你可以选择任何渠道来揭露它。请记住,因为人们和工具遵循这个惯例,他们习惯于在那里看到它,而一些(写得不好)的工具可能会在不同的扩展中窒息。

P.S。我想提到的另一件事 - 与这个答案没有严格关系,但有点强化了惯例 - 是the new ?singleWsdl option in WCF 4.5

与大多数其他工具一样,WCF在?wsdl地址公开WSDL,但使用带外部模式的xsd:import语句。有些框架无法使用导入的依赖项处理WSDL,因此人们开始在WCF上编写自定义项以暴露平面WSDL,以至于在最新版本的WCF中Microsoft决定立即添加此功能。

但是为了向后兼容,他们需要保持?wsdl端点不变(返回带有xsd:import语句的WSDL文档),并被迫为平面WSDL添加新的查询参数:{{1 }}。我相信其他网络服务供应商和提供商也会接受这个想法。

答案 1 :(得分:1)

不,它不是强制要求?wsdl访问,但它的推荐方式。 值得注意的是,大多数客户端会尝试将“?wsdl”附加到您的URL并尝试访问WSDL文件,因此强烈建议您进行设置。