gpt4 book ai didi

.net - 我无法修改的库中类的 Wcf 数据契约(Contract)

转载 作者:行者123 更新时间:2023-12-02 00:34:10 26 4
gpt4 key购买 nike

您好,我有一个执行方法的类库,并且有很多不同的类用作方法调用的参数...我正在为这个类库创建一个 wcf 包装器。但我无权更改类库。

现在我的问题是如何轻松地将这些类公开为数据契约/数据成员......?

我需要大约 100 个不同的类来实现这些方法。

谢谢

最佳答案

如果您真的不能更改库,那么我相信您通过 WCF 公开类的唯一选择是为每个方法创建包装器对象。我会考虑为此任务编写一个代码生成器。

您可以反射(reflect)要公开的程序集中的类型集,以获取所需的类型元数据信息。

您可以使用类似 t4 模板(VS 2008 及更高版本的一部分)和 T4 Toolbox创建代码生成器来为您编写代码。生成器完成后,如果您的库发生变化,应该很容易再次运行。更新代码生成器并重新运行它也很容易修复错误。

我提到的另一个选项只是为了完整性但有一些棘手的问题是反汇编和修补有问题的代码。您可以使用 ildasm 之类的工具来转储程序集的 il,添加必要的 WCF 属性,然后使用 ilasm 重新组装它。但是,这个过程很容易出错,任何时候程序集发生变化你都必须重做这个过程,根据谁拥有程序集的 IP 可能会出现法律问题,你将不得不重新签署程序集,如果它需要是一个强名称程序集,则可能使用不同的加密证书。

* 编辑 *

请求的包装器代码示例:

public class ToWrap {
public String Name { get; set; }
public String Address { get; set; }
}

[DataContract]
public class Wrapper {
private ToWrap _wrapped;

// constructor for WCF marshalling
public Wrapper() {
_wrapped = new ToWrap();
}

public Wrapper(ToWrap wrapped) {
_wrapped = wrapped;
}

[DataMember]
public String Name {
get { return _wrapped.Name; }
set { _wrapped.Name = value; }
}

[DataMember]
public String Address {
get { return _wrapped.Address; }
set { _wrapped.Address = value; }
}
}

关于.net - 我无法修改的库中类的 Wcf 数据契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344121/

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