gpt4 book ai didi

c# - 如何使用从重叠的 WSDL 生成的 WCF 代理来制作 DRY 代码

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:13 25 4
gpt4 key购买 nike

我有一堆来自客户的 WSDL,描述了我必须在我的应用程序中使用的 Web 服务。

有一种 Web 服务用于创建项目,一种用于查询它们,一种用于更新它们。这些 WSDL 有很多重叠。我必须创建、查询和更新的项目以相同的方式存在于所有三个 WSDL 中。

当我使用 svcutil 时,我可以为三个 WSDL 生成代理,但随后每个代理都会再次定义这些项目。所以我有同一个类,三次,只是在不同的命名空间中。

使用它迫使我重复大量代码(例如,必须以完全相同的方式为每个代理完成在代理类上映射域对象)。

我能想到的唯一解决方案是手动编辑代理并删除重叠部分。但是,我认为这将使我在重新生成代理时难以管理 Web 界面中的更改。

我想知道是否有可能以某种方式一次性生成所有代理。

提前致谢。

最佳答案

您可能会考虑编写一个程序来解析所有客户 WSDL 并将操作等存储在某种映射(或多映射)中。然后迭代 map 并删除重复项并将结果写入另一个最终的 WSDL 和代码生成器。不过,您必须对命名空间做一些事情。

但需要考虑的事项:这样做所需的代码是否会比您已经复制的额外代码更多?

另一种选择是为重复的操作定义一个代理类。您必须通过使用命名空间添加操作来初始化它(创建命名空间字符串映射到操作映射,它本身就是映射到要执行的代码/对象的操作字符串)。然后每次要执行特定操作时,传入命名空间字符串进行操作。

假设我们在命名空间 ns1、ns2 和 ns3 中定义了 Op1,在 ns1 和 ns2 中定义了 Op2。然后伪代码(强烈的 c++ 偏见)可能是这样的:

class ProxyOperations
{
addOperation(string opName, string namespace, OperationBase op);
// You'll have to figure out what to do with the operation parameters,
// maybe wrap them in a parameter context
void doOperation(string opName, string namespace) {
// lookup operation object and execute it
}
typedef map<string, OperationsBase> OperMap;
typedef map<string, operMap> NamespaceMap;
NamespaceMap namespaceOperationMap_;
};

{
ProxyOperations po;

// Populate it
po.addOperation("Op1", "ns1", oper1ObjectNs1);
po.addOperation("Op1", "ns2", oper1ObjectNs2);
po.addOperation("Op1", "ns3", oper1ObjectNs3);

po.addOperation("Op2", "ns1", oper2ObjectNs1);
po.addOperation("Op2", "ns2", oper2ObjectNs2);

// now use it
po.doOperation("Op1", "ns2");
}

关于c# - 如何使用从重叠的 WSDL 生成的 WCF 代理来制作 DRY 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10895330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com