WSDL 下载器






4.33/5 (5投票s)
一个用于下载 WSDL 及其相关文件,并将其更新为相对路径的应用程序。
引言
这个小应用程序将帮助您在指向一个服务后下载 WSDL 及其相关文件。该应用程序将解析它下载的每个文件,搜索要下载的新文件,同时将 URL 更新为相对路径。这将一直持续到找不到更多文件为止。
背景
有些人可能会问...为什么?答案很简单...为了节省时间。作为一名 .NET 开发人员,我被要求开发一个(最重要的)Java 客户端应用程序。
在开发周期的最后,我开始研究性能改进,并发现 Java 代码库中的 JAXB 库开发得相当糟糕。该库要求在创建服务连接时在运行时加载 WSDL。
我正在使用的服务非常大。传输和后续处理 WSDL 的时间大约需要 4 秒。虽然这有点不可接受,但我有一个更大的问题。动态创建 WSDL 的时间长达 5 分钟。如果我必须一次性创建 WSDL,例如在部署时,我可能可以接受。事实证明,IIS 会在一段时间后丢弃 WSDL 内存。这意味着 WSDL 将不断被重新生成,我被迫陷入一个 Java 环境无法使用该服务的情况。
在做了一些研究后,我发现可以通过提供静态 WSDL 来提高性能。WSDL 可以在服务器端或客户端部署。由于这是一个 Java 问题,有人可能会认为它应该由 Java 开发人员在客户端创建和部署。另一个好处是,这些文件不必传输,这可能会堵塞您的网络。在服务器端执行的好处是 Java 开发人员永远不必了解它。这可能会帮助您的技术支持人员。在我看来,两者都不可接受,Java 人员应该修复这个库。
要实现这两种方法,您都需要保存 WSDL 和所有引用的文件,然后手动修改这些文件,将引用的文件从 URL 更改为基于文件的相对路径。这在开发过程中 Web 服务的每次更改时都会变得很繁琐,这也是导致我创建此应用程序的原因。
使用代码
这个非常简单的应用程序是为快乐路径而设计的。如果您的服务像我的情况一样需要 5 分钟,请确保在尝试检索文件之前加载它。此外,没有错误或状态消息,因此只需检查您的输出目录即可。
最后一点值得关注的是 Data\RegEx.xml 文件。此文件包含用于搜索和替换 WSDL 文件中数据的表达式。如果除了目前定义的两个:辅助 WSDL 和 XSD 之外,您还需要定义,则需要提供您自己的定义。您可以随意添加或替换。name
属性仅用于参考,没有真正的实际用途。
静态 WSDL 的实现
为了在服务器端使用 WSDL,您需要添加 externalMetadataLocation
属性。WSDL 和支持文件需要与 Web 服务部署在同一目录中。如果您按照所述方式部署文件,则导航到父目录(如下例所示)是正确的。
<system.serviceModel>
<behaviors>
<serviceMetadata httpGetEnabled="true"
externalMetadataLocation="..\MyWebService.wsdl" />
</behavior>
</system.serviceModel>
要在 Java 客户端上使用 WSDL,您可以使用以下代码,或在创建代理对象时指定 WSDL 位置。要指定 WSDL 位置,您需要查看您的代理生成器的文档。
String urlString = "file:/C:\\temp\\WSDL\\MyWebService.wsdl";
MyWebService service = new MyWebService( new URL(urlString),
new QName("http://tempuri.org/", "MyWebService"));
结论
与我所有的文章一样,我希望我帮助了另一个有需要的开发人员。