我有三个Web服务,由三个不同的供应商开发,具有不同的URL;输入参数和输出参数。它们都是ASMX Web服务。它们用于从第三方关系数据库中删除记录,例如我提供了personID,并且从一个系统中删除了一个人以及与该人相关联的所有内容。在另一个系统中,我提供订单ID,并删除与订单相关的所有内容。
我有几个选择:
哪种方式最好?
答案 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服务。