统一访问Web服务

时间:2013-09-30 18:34:25

标签: vb.net web-services asmx

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

我有几个选择:

  1. 创建一个包装类,负责访问Web服务;提供公共输入参数并接受公共输出参数。这门课有很多责任。
  2. 创建三个包装类,即每个Web服务一个
  3. 修改Visual Studio生成的代理
  4. 哪种方式最好?

1 个答案:

答案 0 :(得分: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服务。