从 WSDL 文件逆向工程 Web 服务接口的最佳方法?
-
04-07-2019 - |
题
我继承了系统上 Web 服务的 WSDL 文件,但我无权访问该文件进行开发和测试。
我需要生成一个遵循该 WSDL 的 Web 服务。包装器是 .NET,但如果有一种简单的方法可以在另一个平台上做到这一点,我们也许可以看看。生产 Web 服务是基于 Java 的。
执行此操作的最佳方法是什么?
笔记:继承的wsdl似乎不兼容 wsdl.exe 因为它不符合 WS-I Basic Profile v1.1。特别是,传递它的组织提到它使用了 Microsoft 工具不支持的另一个标准,但他们没有澄清。该错误与必填的“名称”字段相关:
Error: Element Reference '{namespace}/:viewDocumentResponse' declared in schema type '' from namespace '' - the required attribute 'name' is missing
为了清楚起见,我知道我可以轻松地从 WSDL 文件创建 .NET 包装器类,但这不是我需要的。就像这样:
更新:最初的 Web 服务是使用 Axis 创建的。
显示不可用 Web 服务和模拟 Web 服务的系统图 http://paulw.us/blog/uploads/SO-WSDL-Question2.gif
解决方案
我们正在使用 WSCF - Web Services Contract First 工具Thinktecture首先创建XSD架构的Web服务开发,然后使用此工具生成服务接口。从WSDL生成服务接口可能很有用,但我自己还没有尝试过。
其他提示
您可能会发现有用的命令行实用程序 .NET的wsdl.exe
使用 / serverInterface
选项。根据文件:
为服务器端生成接口 ASP.NET Web的实现 服务。为其生成接口 WSDL文档中的每个绑定。 WSDL单独实现WSDL 合同(实施该合同的类) 界面不应包括任何一个 关于类方法的以下内容: Web服务属性或 更改的序列化属性 WSDL合同)。简称是 '/ SI'。
是 - 您可以使用WSCF(如上所述)生成服务器端代码。然后可以覆盖实际的URL以指向您要使用的测试URL。
但是,这只会生成一个存根。你仍然需要编码实际的例如GetCustomers()方法有点怀疑,因为你不知道实际的实现是如何工作的。
然后你可以模拟它或创建一个简单的ASP Web服务器来运行它。
尝试使用 RhinoMocks 和 StructureMap 。
不确定这是否有帮助,
我最近所做的是:
- 使用wsdl工具或Visual Studio生成.cs文件
- 我已将其更改为部分类
- 我创建了另一个分部类,其中它所做的只是添加一行来说明该类实现了 IWhatEver
- 我创建了一个与生成的代理类相同的接口(因此代理完全实现了该接口)
然后我在我的例子中使用了一个模拟框架(Moq)来模拟WebService,然后我使用了穷人依赖注入(将模拟传递到被测类的构造函数中)..它可以处理 IWhatever 的实例
测试一下..
希望有帮助