使用键值对的通用Web服务方法

时间:2014-09-24 09:57:44

标签: c# sql-server web-services wcf wsdl

我们有一个遗留应用程序,其中包含用于与数据库交互的大量不同的存储过程。我们通过新的Web服务层公开这些功能的特定子集,我们将向第三方发布。

我们应该编写单个通用Web服务,还是为每个要公开的函数编写服务和方法?

选项1

单个Web服务和WSDL,它将API名称和键/值对列表作为其参数。该服务将使用提供的API名称来查找有问题的存储过程,然后将键/值对映射到proc。此设计旨在(a)减少要写入的Web服务代码,以及(b)在收到暴露其他存储过程的请求时减少以后的成本。

选项2

我们为每个函数和sproc生成一个WSDL和服务,并对其进行专门命名。例如。 Client.wsdl,方法AddClient,UpdateClient,DeleteClient和User.wsdl,方法有AddUser,ReportUser,UpdateUser等。这个设计旨在让构建到界面的第三方的生活更轻松,并允许特定于每个方法移动的验证进入服务层。

2 个答案:

答案 0 :(得分:2)

我会选择选项2

Web服务对您的应用程序来说是一个相当大的开销(而不仅仅是使用自定义二进制协议的TCP连接)。它们的全部目的是生成第三方可以轻松使用的简单界面。

你还谈到了另一个重点。如果使用键/值对,则会失去大量验证。你可能会接到这样的电话,“我们试图使用你的API而它只是不工作!!”。因此,通过发布更详细的WSDL文件,如果通信无法正常工作,则更容易跟踪谁“出错”。

答案 1 :(得分:0)

如果是从零开始构建,我们也会按照@Paul的建议选择选项2。

然而,在详细规划之后&估计,我们得出结论,选项1(提供键/值对的单一方法)对于我们提供访问遗留API的情况更为可取。

这是因为:

  1. 我们需要提供大量存储过程来提供访问

  2. 虽然我们提供了一种新的访问方式,但应用程序的体系结构仍然基于这些存储过程以及它们运行的​​表格 - 例如随着应用程序的扩展,它将首先位于此层

  3. 开发通用Web服务方法可以大大降低公开每个存储过程的增量成本

  4. 这意味着我们可以降低未来的软件更改成本,同时增加API支持调用的风险,但希望通过为用户提供非常全面的文档来减轻这种影响。