我有三个 Web 服务,它们是由三个不同的供应商开发的,并且具有不同的 URL;输入参数和输出参数。它们都是 ASMX Web 服务。它们用于从第三方关系数据库中删除记录,例如我提供一个 personID,然后一个人就会从一个系统中删除,并且所有与该人相关的内容都会被删除。在另一个系统中,我提供了订单 ID,并且与订单链接的所有内容都被删除。
我有几个选择:
- 创建一个包装类,负责访问 Web 服务;提供公共输入参数并接受公共输出参数。这个班级将承担很多责任。
- 创建三个包装类,即每个 Web 服务一个
- 修改Visual Studio生成的代理
哪种方式最好?
我建议允许 Visual Studio 自动生成适当的代理类。然后,我将为每个 Web 服务实现一个包装器类,以便所有包装器类都可以实现相同的接口。例如,您可以创建一个如下所示的通用界面:
Public Interface IPersonBusiness
Sub DeletePerson(personId As String)
End Interface
然后,假设您有两个 Web 服务。第一个,我们称之为WebService1
, has a Delete
方法采用人员 ID 和删除时间。第二个 Web 服务,我们称之为WebService2
, has a 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 服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)