当有其他提供者时,如何在消费者端为 1 个提供者添加元素到 WS 操作?

Posted

技术标签:

【中文标题】当有其他提供者时,如何在消费者端为 1 个提供者添加元素到 WS 操作?【英文标题】:How to add an element to WS-operation in consumer end for 1 provider when there's other providers? 【发布时间】:2016-12-18 03:45:43 【问题描述】:

我编写了一个 WSDL 和实现 AddCar 操作的消费者/客户端,该操作具有模型和颜色的数据。现在,一个 WS 生产者/服务器也希望有长度数据。我假设其他生产者由于实施外包而难以适应这种变化。我的选择包括:

    进行新操作 AddCarWithLength 使用相同的操作制作 2 个版本的 WSDL 和使用者代码 只需将 WSDL 更新为 可选 长度,并仅包含需要它的生产者的操作数据。 只需使用 0-N 名称-值对元素更新 WSDL,并仅包含需要它的生产者的操作数据。 要求客户让实施 WS 生产者的公司对其进行更新。

选项:

    不可能 我在消费者/客户端中生成了 C# 类,因此会有两个代码集。我仍然需要知道(可能使用配置参数或 smthn)生产者/服务器使用哪个版本 意味着我只需要知道我与哪个生产者/服务器交谈。 与 3 相同,但允许未来扩展 可能有问题

问题: 当要求更新所有生产者可能不现实时,正确/最佳的方法是什么?

【问题讨论】:

【参考方案1】:

WSDL 以宝贵的定义而闻名。起初,服务的设计应始终清楚地了解使用情况和未来。无论如何,现在我的理解是向您现有的 WCF 服务添加一个属性(数据元素 - 长度)。我的建议是,

    分析并添加您的自定义类并将其命名为数据协定,然后添加到您的 WCF 操作中并将其公开为新的接口/操作协定。

例如。 在 Class car 中,有一个数据成员作为属性。 使用 in 属性定义所有分析结果元素,如长度、宽度、颜色、重量等。 还要添加一个Dictionary<string,string> CustomAttributes;,以便您以后可以使用它。

    与上述类似,但如果您没有太多时间。 无需任何分析,只需添加 Dictionary<string,string> Parameters; 并公开新合约并加以利用。

【讨论】:

谢谢!我使用 Top->Down 开发,所以我在 WSDL 中进行更改并在之后生成代码。您建议我的选择:“4. 只需使用 0-N 名称-值对元素更新 WSDL,并仅包含需要它的生产者的操作数据。”但是,您没有解决主要问题,即我应该如何处理生产者 A.K.A.无法适应变化的 Web 服务。

以上是关于当有其他提供者时,如何在消费者端为 1 个提供者添加元素到 WS 操作?的主要内容,如果未能解决你的问题,请参考以下文章

多线程如何并发访问SQLite数据库

Nacos服务发现

在使用 mpdf 库生成的 pdf 中添加分页符

当有标准的 maxlength 时,为啥 Angular 会提供 ng-maxlength?

Laravel 消费者和提供者应用架构

Confluence 6 外部小工具在其他应用中设置可信关系