2

我有三个 Web 服务,它们由三个不同的供应商开发并且具有不同的 URL;输入参数和输出参数。它们都是 ASMX Web 服务。它们用于从第三方关系数据库中删除记录,例如,我提供了一个 personID,然后从一个系统中删除了一个人以及与该人相关的所有内容。在另一个系统中,我提供了一个订单 ID,与该订单相关的所有内容都将被删除。

我有几个选择:

  1. 创建一个单独的包装类,负责访问 Web 服务;提供公共输入参数并接受公共输出参数。这个类将有很多责任。
  2. 创建三个包装类,即每个 Web 服务一个
  3. 修改 Visual Studio 生成的代理

哪种方式最好?

4

1 回答 1

1

我建议允许 Visual Studio 自动生成适当的代理类。然后,我将为每个 Web 服务实现一个包装器类,以便所有包装器类都可以实现相同的接口。例如,您可以创建一个如下所示的通用界面:

Public Interface IPersonBusiness
    Sub DeletePerson(personId As String)
End Interface

然后,假设您有两个 Web 服务。第一个,我们称之为它WebService1,有一个Delete方法,它需要一个人 ID,然后是删除时间。第二个 Web 服务,我们称之为它WebService2,有一个DeletePeople接受人员 ID 数组的方法。我们可以使用上述通用接口包装这两个 Web 服务,如下所示:

Public Class WebService1Wrapper
    Implements IPersonBusiness

    Public Sub New(proxy As WebService1)
        _proxy = proxy
    End Sub

    Private _proxy As WebService1

    Public Sub DeletePerson(personId As String) Implements IPersonBusiness.DeletePerson
        _proxy.Delete(personId, Date.Now)
    End Sub
End Class

Public Class WebService2Wrapper
    Implements IPersonBusiness

    Public Sub New(proxy As WebService2)
        _proxy = proxy
    End Sub

    Private _proxy As WebService2

    Public Sub DeletePerson(personId As String) Implements IPersonBusiness.DeletePerson
        _proxy.DeletePeople({personId})
    End Sub
End Classs

除非你真的需要,否则我会避免编写你自己的代理代码。例如,如果您需要根据一些外部设置动态调用任何 Web 服务,这些设置会告诉您要传递的方法名称和参数,或者类似的东西,那么值得研究一下。

我还会避免将调用任何 Web 服务的所有逻辑放入单个包装类中。这样做会使代码变得不必要的丑陋和混乱,特别是如果您将来需要添加额外的 Web 服务。

于 2013-09-30T19:56:04.210 回答