是否有任何标准规定 Web 服务应通过附加?wsdl
到端点地址来提供 WSDL?
如果 WSDL 托管在不同的 URL(不附加?wsdl
)上可以吗?
例如:
Endpoint: http://abc.xyz.com/MyService
WSDL: http://abc.xyz.com/MyServiceDefinition.pqr
请注意,我什至为 WSDL 定义使用了不同的扩展。
使用这种方法是否违反了任何标准,或者可以按照他们想要的方式托管东西?
是否有任何标准规定 Web 服务应通过附加?wsdl
到端点地址来提供 WSDL?
如果 WSDL 托管在不同的 URL(不附加?wsdl
)上可以吗?
例如:
Endpoint: http://abc.xyz.com/MyService
WSDL: http://abc.xyz.com/MyServiceDefinition.pqr
请注意,我什至为 WSDL 定义使用了不同的扩展。
使用这种方法是否违反了任何标准,或者可以按照他们想要的方式托管东西?
是否必须使用 WSDL 定义来访问
?wsdl
?
不,这不对。
提供 WSDL 用于描述 Web 服务契约,因为它允许工具自动生成客户端存根代码以调用指定的 Web 服务。将 WSDL 与附加的 Web 服务公开在同一位置?wsdl
非常方便,这是每个人都使用的约定。
人员和工具会在该位置查找 WSDL,框架会自动在该位置公开它,但这只是一种约定。据我所知,这没有在任何规范中指定(或者至少没有我能找到)。
有时,尽管您不想提供每个人都可以查看的 WSDL 并尝试创建客户端,因为它是私有 Web 服务,您只想将访问权限授予您的合作伙伴,而不是所有人。此时,您可以禁止该?wsdl
URL 并使用替代渠道仅将 WSDL 提供给您的合作伙伴。如果您不希望它在网上公开,您甚至可以通过电子邮件发送它。
所以你可以选择任何渠道来公开它。请记住,因为人们和工具都遵循这个约定,所以他们习惯于在那里看到它,并且一些(写得不好的)工具可能会在不同的扩展中窒息,例如。
PS我想提到的另一件事 - 与这个答案没有严格相关,但有点加强了约定 - 是WCF 4.5中的新?singleWsdl
选项。
与大多数其他工具一样,WCF 在?wsdl
地址处公开 WSDL,但使用带有外部模式的 xsd:import 语句。一些框架无法处理带有导入依赖项的 WSDL,因此人们开始在 WCF 上编写自定义以公开一个扁平的 WSDL,以至于微软决定在最新版本的 WCF 中立即添加此功能。
但是为了向后兼容,他们需要保持?wsdl
端点不变(返回一个带有 xsd:import 语句的 WSDL 文档),并且被迫为平面 WSDL: 添加一个新的查询参数?singleWsdl
。我相信这个想法也会被其他网络服务供应商和供应商采纳。
不,拥有 ?wsdl 访问权限不是强制性的,但它是推荐的方式。值得注意的是,大多数客户端会尝试将“?wsdl”附加到您的 URL 并尝试访问 WSDL 文件,因此强烈建议设置它。