从WSDL文件反向设计Web服务接口的最佳方法?

时间:2008-10-24 19:24:30

标签: .net web-services wsdl reverse-engineering

我在一个我无权访问开发和测试的系统上继承了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创建的。

Diagram of system showing unavailable web service and mock web service http://paulw.us/blog/uploads/SO-WSDL-Question2.gif

5 个答案:

答案 0 :(得分:5)

使用/serverInterface选项可能会发现.NET的command line utility wsdl.exe很有用。根据文件:

  

为服务器端生成接口   ASP.NET Web的实现   服务。为其生成接口   WSDL文档中的每个绑定。   WSDL单独实现WSDL   合同(实施该合同的类)   界面不应包括任何一个   关于类方法的以下内容:   Web服务属性或   更改的序列化属性   WSDL合同)。简称是   '/ SI'。

答案 1 :(得分:1)

我们正在使用Thinktecture的WSCF - Web Services Contract First工具进行Web服务开发,首先创建XSD架构,然后使用此工具生成服务接口。从WSDL生成服务接口可能很有用,但我自己还没有尝试过。

答案 2 :(得分:1)

是 - 您可以使用WSCF(如上所述)生成服务器端代码。然后可以覆盖实际的URL以指向您要使用的测试URL。

但是,这只会生成一个存根。你仍然需要编码实际的例如GetCustomers()方法有点怀疑,因为你不知道实际的实现是如何工作的。

然后你可以模拟它或创建一个简单的ASP Web服务器来运行它。

答案 3 :(得分:0)

尝试使用RhinoMocksStructureMap模拟包装器界面。

答案 4 :(得分:0)

不确定这是否有帮助,

我最近做的是:

  • 使用wsdl工具或visual studio
  • 生成.cs文件
  • 我把它改成了部分类
  • 我创建了另一个部分类,其中所做的只是添加一行来表示该类实现了IWhatEver
  • 我创建了一个与生成的代理类相同的接口(因此代理完全实现了接口)

然后我在我的情况下使用了Mocking框架(Moq)来模拟WebService,然后我使用了差的mans依赖注入(将mock传递给被测试的类的构造函数)..它可以处理IWhatever的一个实例

测试..

希望有所帮助