统一访问Web服务

2024-01-12

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

我有几个选择:

  1. 创建一个包装类,负责访问 Web 服务;提供公共输入参数并接受公共输出参数。这个班级将承担很多责任。
  2. 创建三个包装类,即每个 Web 服务一个
  3. 修改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(使用前将#替换为@)

统一访问Web服务 的相关文章

随机推荐

  • 使用 Phonegap for android 的应用程序图标[重复]

    这个问题在这里已经有答案了 我正在尝试将图标应用到我在 PhoneGap 本地制作的应用程序中 我已经进行了尽可能多的搜索 并且只找到了在 PhoneGap 构建上应用应用程序图标的方法 但是我正在 Eclipse 中本地构建应用程序 有人
  • 如何使用 Slick 代码生成器来包含数据库视图?

    我正在尝试使用 Slick 3 0 3 为我的架构中的数据库表和视图生成 Scala 代码 服用这个博客 http arnaudt github io 2015 03 31 slick codegen html例如我有以下文件build s
  • 如何在 Yii 中播种?

    我想知道一旦通过迁移创建了表 如何在 Yii 中播种 我有一个使用 up 方法的迁移 public function up this gt createTable users array id gt pk login gt string N
  • 如何减去两个数字字符串[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 查找二叉搜索树中某个节点的父节点

    所以我想找到二叉树中一个Node的父节点 假设我通过文本文件在树中输入30 15 17 45 69 80 7 这棵树应该是 30 15 45 7 17 69 80 这是我的代码 Node BST searchforparentnode No
  • Angularjs:事件发生后服务器端(php)渲染和数据绑定客户端

    后端提供了一个完全渲染的网站 在前端我希望 AngularJS 通过 ajax 调用 数据绑定来处理动态内容 但是如果你提供指令 ng bind 那么 AngularJS 会将它们直接绑定到它们的初始值 该值在任何之前都是 NULL用户操作
  • 如何在IE10 Mobile中制作固定div?

    如何制作适用于 Windows Phone 8 上 IE10 Mobile 的固定 div 我当前使用的代码是 div style width 100 background color blue test div 这仅部分有效 当用户滚动时
  • 使用 numpy 在重复信号的一部分内绘制抛物线

    我有一个重复信号 它随着大约每秒重复一次的过程的每个周期而略有变化 尽管每个周期的持续时间和内容在某些参数内略有不同 我的信号数据每秒有一千个 x y 坐标 每个周期内的一小部分但很重要的数据已损坏 我想用向上的抛物线替换每个损坏的部分 对
  • 安卓屏幕方向

    I tried getOrientation 获取方向值但它总是返回0 getOrientation 已弃用 但这不一定是问题的根源 确实 您应该使用获取旋转 代替获取方向 但只有当您的目标是 Android 2 2 API 级别 8 或更
  • 无法将关键字“用户名”解析为字段。选项有:城市、身份证、电话等

    我想就这些问题寻求帮助 我确实知道这似乎与同一问题的其他问题相似 但我环顾四周 发现没有什么可以真正解决我的问题 顺便说一句 这是我第二次在这里提问 所以请告诉我这条消息是否太长 谢谢 我将 AllAuth 与 Django 1 8 和 P
  • 如何为postgresql中的所有表创建触发器?

    我有一个触发器 但我需要与我的 postgres 的所有表关联 有下面这样的命令吗 CREATE TRIGGER delete data alldb BEFORE DELETE ON ALL DATABASE FOR EACH ROW EX
  • 将 UILabel 文本设置为粗体[重复]

    这个问题在这里已经有答案了 如何设置文本UILabel以编程方式在 Swift 中加粗 到目前为止我的代码 var label UILabel frame theFrame label text Foo Use font的财产UILabel
  • 带有徽标图像的 django pdf

    我使用比萨创建了发票 Pdf 文本模板 但我想在 pdf 文件中显示徽标 图像 以及文本 我不知道如何在 pdf 中显示图像 我的看法如下 def generate invoice request user id None personal
  • 在 .NET Core 中将 HTML 转换为图像

    我想在 Web 服务器上将 HTML 代码转换为图像 png jpg 然后在我的 NET Core 应用程序中通过电子邮件发送图像链接 我不想购买任何第三方库 如 NReco 或 EVo 还有其他方法可以在 dotnet core 2 0
  • 有没有一种方法可以仅使用 javascript 命令来选择图像并将其复制到剪贴板?

    我想复制图像本身而不是任何文本或相关的 src 我做了一个 jsfiddle 的例子https jsfiddle net pvuefca7 1 https jsfiddle net pvuefca7 1 您可以尝试一下 发现复制文本效果很好
  • 如何在 Formik 上实现自定义 handleChange 函数?

    在输入元素中 handleChange 函数将从 onChange 事件接收事件对象 如何为如下非输入字段创建自定义 handleChange 函数 import React from react import useFormik from
  • 如何使用 XCTest 从 iOS 13 删除/重置应用程序?

    最近我开始使用 XCTest 测试 iOS 应用程序 但我发现了一些困难 主要困难是删除或重置每个测试类中的应用程序内容 我目前正在使用 XCode 11 并尝试从 iOS 13 中为每个测试类删除 重置应用程序 我已经尝试过 通过跳板删除
  • 在 adMob 中仅显示文字广告

    我已将我的 adMob 帐户更新到新版本 我只想在我的应用中显示文字广告 我如何使用新版本的 adMob 帐户做到这一点 或者 如何在新版本的 adMob 帐户中屏蔽图片广告 这可以在您的 AdMob 帐户上完成 去 AdMob gt 获利
  • 检查是否在 mySQL 的多个列之一中找到字符串

    我需要检查是否在一列或多列中找到字符串 基本上 我有一个程序可以让你检查多个字段 姓名 姓氏等 如果同时检查姓名并且用户仅输入姓名 例如 chris 则可以很容易地在 mySQL 中使用 LIKE 参数进行检查 如下所示 select fr
  • 统一访问Web服务

    我有三个 Web 服务 它们是由三个不同的供应商开发的 并且具有不同的 URL 输入参数和输出参数 它们都是 ASMX Web 服务 它们用于从第三方关系数据库中删除记录 例如我提供一个 personID 然后一个人就会从一个系统中删除 并