版本控制 SOAP 主体与整个服务?

2024-04-08

尝试了解 SOAP 和 Web 服务的版本控制。根据我的发现,使用 URL 执行类似的操作似乎是可以接受的:

www.company.com/service/01-12-10/ 和 www.company.com/service/03-08-10/ 和 www.company.com/service/ 支持最新版本。

我知道这是正确的方法,而不是像这样对 SOAP 主体/有效负载进行版本控制:

[client]

someRequest = newRequest(){ ClientVersion = "1.0.0" };
webService.Go(someRequest);

[web service]

if request.ClientVersion == "1.0.0"
  do this code
else
  do this code

我可以看到当进行更改时所有条件将如何失控,并且当删除 Web 方法的签名时,这不会处理这种情况。然而,最重要的是,这并不是对整个服务进行版本控制,而只是对主体进行版本控制。

所以,我的问题是,我通过更改 URL 以包含该版本是否正确?这是否涵盖了所有必要的领域?看起来我会遇到一些命名空间冲突?是否也需要更改名称空间?尝试了解服务版本化意味着什么。请展开。


让客户端发送版本参数通常不是首选,因为您不能指望客户端发送正确的版本号(如果您的 Web 服务有多个版本,您最终可能会收到版本 X 的有效负载,但标记为版本参数值 Y)。

因此,最好使用合约模式的命名空间强制执行版本,例如:

...
<types>
      <xs:schema xmlns="http://tempuri.org/v1"
                targetNamespace="http://tempuri.org/v1">
...

当你做对您的合同进行重大变更 https://stackoverflow.com/questions/8786935/what-are-considered-non-breaking-or-backwards-compatible-changes-to-a-wsdl-contr(就像删除一个操作)你破坏了所有现有的客户端,这是一个很大的NO NO,因为你基本上使你的网络服务不可调用,因此毫无用处。

因此,当您进行主要版本更改时,您会公开一个新合约,您现在定义如下:

...
<types>
      <xs:schema xmlns="http://tempuri.org/v2"
                targetNamespace="http://tempuri.org/v2">
...

你们继续支持v1对于现有客户,同时使用v2迎接所有新客户的到来(幸运的是,随着时间的推移,您的v1客户可以迁移到v2).

当您需要支持多个版本时,您基本上需要管理端点。此时你可以采取两种方式。

您可以维护一个端点,例如www.company.com/service/它接收所有消息(v1 and v2)并充当外观,根据消息命名空间重定向到正确的实现或...

...您直接将版本公开为单独的端点,现有客户端将使用接收的旧端点v1消息(也许www.company.com/v1/service/)而新客户端使用另一个仅接收v2消息(也许www.company.com/v2/service/).

上述设置对于您的(只有一个)业务实现来说更容易,该业务实现通过 Web 服务的不同骨架实现向客户端公开。骨骼为v1 and v2将其特定的负载参数转换为业务层的适当参数。通过这种方式,所有调用都会汇聚到业务层,此时业务层通常不关心客户端是哪个版本。

希望现在更清楚了...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

版本控制 SOAP 主体与整个服务? 的相关文章

  • 在浏览器中测试wcf服务

    我无法在浏览器中调用基本的 wcf web 方法 即使使用
  • 使用magento中SOAP API的salesOrderInfo获取简单的产品sku和数量

    我在以下代码中添加了 app code core Mage Sales Model Order Api php File public function info orderIncrementId order Mage getModel s
  • CXF 增加连接池大小而不更改 http.maxConnections

    最近我被要求将 CXF 配置为与我们旧的 XFire 服务相同的参数 这些参数之一是Keep Alive timeout 60 max 20 然而 我做了一些研究 看来 CXF 使用 JVMHttpURLConnection引擎盖下的对象
  • CMake:从多行文本文件获取版本

    我有一个文件version txt VERSION MAJOR 1 VERSION MINOR 1 VERSION PATCH 3 我想使用 cmake 添加主要 次要和补丁的定义 我尝试过使用 file STRING version tx
  • 捕获对 ASP.NET ASMX Web 服务的 SOAP 请求

    考虑将传入的 SOAP 请求记录到 ASP NET ASMX Web 服务的要求 任务是捕获发送到 Web 服务的原始 XML 需要记录传入消息以进行调试检查 该应用程序已经使用了自己的日志库 因此理想的用法如下 string or XML
  • 您在哪里存储 Rails 应用程序的版本号?

    我们用精彩的语义版本控制 http semver org 版本化 Rails 应用程序时的范例 我的一个问题是最好将这个号码存储在哪里 我见过它存储在 lib environment rb etc 只是想知道人们对最佳实践的看法是什么 我的
  • 如何处理 WCF 中不正确的 SOAP 错误?

    我必须使用 SOAP 来使用第三方 Web 服务 让它与 WCF 一起工作很容易 但现在我遇到了 SOAP 错误的问题 该服务向我发送了不正确的 SOAP 错误
  • 在 PHP 页面中嵌入 svn 修订号的简单方法?

    注意到这个页面的右下角有 SVN 修订 ID 了吗 我假设这是动态的 我很乐意将其添加到我的一些网站中 就像源代码中的注释一样 以确保代码推送顺利进行 注意 您还可以假设相关站点的工作目录是相关存储库的 svn checkout Edit
  • 可空类型的方法在使用 GET 的 ASMX Web 服务中不起作用

    我有一个 ASMX Web 服务设置为使用 HTTP GET 方法 采用基本 String 和 Int 参数的简单方法工作正常 我可以调用MyService asmx MethodName Param Value并获得 XML 格式的响应
  • 在哪里捕获异常

    我有一个 WCF svc 分为服务层 业务逻辑层和数据访问层 当我的 DAL 遇到异常时 我应该在那里捕获它还是让它冒泡回到服务层 为什么 请忽略此场景中的任何客户端参与 我只关心在 WCF svc 上记录异常 有一个术语 异常屏蔽 基本上
  • Spring - 如何调整 SoapEnvelopeLoggingInterceptor 比标准输出更正式地记录数据到日志文件

    我正在尝试对我的 Spring Web 服务请求 响应进行正式审核 我在 Spring 配置中设置了这个
  • 如何跟踪我的 Web 服务抛出的 IIS 500 错误

    我已经部署了新版本的 ASP NET Web 服务 当客户端调用此服务时 IIS 日志文件报告错误代码 500 我自己 测试 可以使用该服务 没有任何错误 我在 ASP NET Web 服务中启用了错误日志记录 但没有记录任何错误 这使我相
  • WCF 服务契约将被 XML 和 Json 序列化

    我如何创建要加入的服务合同XmlSerializer 格式也WebMessageFormat Json在 WCF RESTful 服务中 我需要的是从 ASP Net 1 1 的代码后面调用 CallADSWebMethod 操作契约 该契
  • 用 C# 解析和查询 SOAP

    我正在尝试解析一个大量命名空间的 SOAP 消息 源也可以在here http tinyurl com n3av6k
  • AxisFault:请求中缺少 wsse:安全标头

    我正在尝试使用 WSO2 应用程序服务器和身份服务器构建应用程序 基于 Axis2 Framework 的肥皂服务器需要具有基于 WS Trust 的身份验证 为了学习 我正在关注这个博客http www vitharana org 201
  • 将 PictureStream 转换为 HTML5 画布

    我正在从 net Web 服务检索图片流的字节数组 JSON 字节数组响应如下所示 137 80 78 372 617 more 我正在尝试转换这个字节数组并将其绘制到 HTML 画布中 如下所示 var context document
  • 使用 Elmah 进行异常处理

    我用 Elmah 记录异常 想知道我使用的技术是否是好的设计 现在 我捕获并重新抛出各种类和方法中发生的异常 并将它们记录到程序的主 try catch 块中的 Elmah 主程序 try Some code that fires off
  • TSQL 返回 NO 或 YES,而不是 TRUE 或 FALSE

    如果某些列返回 FALSE 如何显示不同的值 例如 COLUMN BASIC 返回 FALSE 但我需要向用户显示 YES 或 NO 情况为 FALSE 返回 NO 如果是 varchar 或 bit 则处理 NULL case when
  • 您如何决定何时升级项目中的库?

    我从事的项目使用多个开源 Java 库 当这些库的升级出现时 我们倾向于遵循保守的策略 如果它没有坏 就不要修理它 如果它没有我们想要的新功能 请忽略它 我们遵循这种策略是因为我们通常没有时间放入新库并彻底测试整个应用程序 像许多软件开发团
  • 当会话令牌无效时,我应该使用什么状态代码?

    创建 Web 服务 RESTful 时 当会话令牌无效时我应该使用什么状态代码 目前我公司的人给我发了一个404 未找到 但我认为这是不正确的 因为资源存在 也许我应该使用 401 Unauthorized 你怎么认为 您建议我在这种情况下

随机推荐

  • scala集合循环缓冲区

    只是在这里用循环缓冲区搞乱 这是一个明智的实现 还是有更快 更可靠的方法来给这只猫剥皮 class CircularBuffer T size Int implicit mf Manifest T private val arr new s
  • 一个得到良好支持的 C++ 联合替代方案?

    我认为联合对于我的想法来说是完美的 特别是当我认为我的代码应该在真正异构的机器系列上运行时 特别是低功率机器上 让我烦恼的是创建编译器的人例如 似乎不太关心引入和提供良好的工会支持这张桌子 http wiki apache org stdc
  • 在编辑文本中输入内容时,列表视图上的过滤器会消失列表项

    我遇到了一个奇怪的问题 实际上 我有一个自定义列表视图 在其中使用过滤器 一切正常 但是当我输入文本进行编辑文本时 它会消失所有列表项 我很奇怪为什么这种情况会发生在我身上 但我仍然不是 Android 的冠军 所以需要一些帮助 我在 st
  • 有没有比使用箭头键更快的替代方法?

    我经常使用 R 进行编码 我刚刚意识到将手向下移动到箭头键 然后再回到键盘上的字母是多么痛苦 在 Rstudio 中 我必须定期执行此操作 因为工作室会自动完成某些语法 例如括号和引号 然后我必须按箭头键移出括号 或引号 然后删除任何可能的
  • 如何使用 logit 函数编写 JAGS 二项式模型文件

    我正在做一项作业 使用 JAGS 对二项式分布进行建模p参数是另一个变量的函数d 这就是我正在尝试做的 为两个参数 alpha beta 从后验生成 10000 个样本 当 dist 25 进行 100 次尝试时 根据后验预测成功次数生成样
  • 如何使滑块离散?

    如何在 Flutter 中使滑块离散如上图所示 滑块离散 https i stack imgur com e2gp6 png Use the divisions的财产Slider https docs flutter io flutter
  • 使用curl和php发送POST数据

    Greets 因此 我在 Amazon EC2 上运行 Fedora Core 8 我安装了 httpd php5 和 libcurl 以及一堆其他东西 似乎工作得很好 但后来我意识到 POST 数据不是由我的 php 脚本中的curl 发
  • get_data_yahoo(pandas_datareader) 中 1m 间隔的问题

    I wrote from pandas datareader import data as pdr import yfinance as yf data pdr get data yahoo AAPL start 2020 04 12 en
  • (111)连接被拒绝 - Apache 反向代理和 Tomcat 8.5.51 - Docker Compose

    这适用于 Tomcat8 5 50 但是 使用 Tomcat8 5 51 Apache 无法通过 AJP 连接 出现以下错误 Tue Mar 10 20 15 31 378937 2020 proxy error pid 42 tid 13
  • 使用 Solver、EXCEL 时保存目标函数值

    我在 Excel 中设置了一个优化问题 当我优化 使用 GUI 时 我得到目标函数的最终 最佳 值 我可以看到 Excel 计算了很多点的目标函数值并确定了最佳点 有没有办法将所有目标函数值保存到 Excel 工作表中的某个范围 如果我可以
  • 我可以限制通过 JavaScript API 放入 S3 的对象的大小吗?

    可以使用 JavaScript API 将对象上传到 S3 并且可以使用 IAM 策略进行细粒度授权 例如 请参阅此政策 Version 2012 10 17 Statement Action s3 PutObject s3 PutObje
  • 当下游正在运行时阻止上游詹金斯作业

    我知道构建阻止程序插件 但似乎不起作用 运行詹金斯 1 609 作业 A 触发作业 B 我将作业 A 配置为在作业 B 正在运行时阻止 如果您触发 A 并且在 A 运行时再次触发 A 一旦第一个 A 完成 它就会触发 B 然后您就会同时运行
  • 仅允许特定 IP 地址访问 JSP 文件/文件夹

    我使用 JSP 和 servlet 制作了一个 CMS 应用程序 我没有使用任何类型的框架 CMS 有 2 个部分 前端 管理员 后端 如果我把它托管在www example com 例如 那么我的所有前端站点都会向所有用户显示 But w
  • 从具有相同列的两个表中选择数据

    我有两个具有相同结构的表 一种包含永久数据 另一种是清除并定期重置的 我需要对两个表使用相同的 select 语句 就好像它们只是一张表一样 这是我尝试过的 选择 从a b哪里 1 Where a and b具有相同的结构 您可能正在考虑在
  • HtmlAgilityPack 可以处理 xsl 文件附带的 xml 文件来渲染 html 吗?

    我想知道 HtmlAgilityPack 读取包含 xsl 文件的 xml 文件以呈现 html 的最佳方式 HtmlDocument 类上是否有任何设置可以帮助实现此目的 或者我是否必须找到一种方法来执行转换 然后再使用 HtmlAgil
  • 如何删除或排除 Ansible 模板列表中的项目?

    我正在编写一个 Ansible 模板 需要生成主机组中的 IP 列表 排除当前主机IP 我在网上和文档中进行了搜索 但找不到任何允许您删除列表中项目的过滤器 我在下面创建了 hacky for循环来执行此操作 但想知道是否有人知道这样的过滤
  • time.time_ns() 在 macOS 上未正确返回纳秒?

    从 Python 3 7 开始 我们有了支持纳秒分辨率的新时间函数 但是 我不确定如何time time ns 应该可以工作 看下面的例子 gt gt gt for n in range 10 time sleep random rando
  • 防止安装具有特定包名的 Android 应用程序

    我正在使用 android studio 开发两个 Android 应用程序 出于某种原因 我希望其中一个应用程序可以安装在设备上 我想我应该检查第二个应用程序的包名称并阻止它安装 有什么办法可以做到这一点吗 谢谢 您无法阻止任何应用程序的
  • 分段色彩图的自定义色彩图边界

    我有下图 其中包含具有某些量化特征的多个向量的可用数据 import matplotlib pyplot as plt import numpy as np import matplotlib colors as colors fig pl
  • 版本控制 SOAP 主体与整个服务?

    尝试了解 SOAP 和 Web 服务的版本控制 根据我的发现 使用 URL 执行类似的操作似乎是可以接受的 www company com service 01 12 10 和 www company com service 03 08 1