我无法修改的库中类的 Wcf 数据契约

2024-03-11

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

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

我有大约 100 个不同的类,我需要这些方法。

Thanks


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

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

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

我提到的另一个选项只是为了完整性,但存在一些棘手的问题,那就是反汇编和修补有问题的代码。您可以使用类似 ildasm 的工具来转储程序集的 il,添加必要的 WCF 属性,然后使用 ilasm 重新组装它。但是,该过程可能容易出错,每当程序集发生更改时,您都必须重做该过程,并且可能会出现法律问题,具体取决于谁拥有程序集的 IP,并且您必须重新签署程序集,如果它需要是强名称程序集,则可能具有不同的加密证书。

* Edit *

请求的包装器代码示例:

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

我无法修改的库中类的 Wcf 数据契约 的相关文章

随机推荐

  • 如何验证空白/空白? [角度2]

    我想避免 Angular 2 形式中的空格 空白 是否可以 如何才能做到这一点 您可以创建自定义验证器来处理此问题 new FormControl field fieldValue Validators required this noWh
  • Node.JS 中使用 async/await 的正确请求

    在我的程序中我做async从另一个 API 模块调用我的函数 var info await api MyRequest value 模块代码 var request require request module exports MyRequ
  • PHP 无法从接口扩展?

    我在一个 php 文件中写了下面的内容 人是一个界面 工程师扩展了人 但是当我运行这段代码时 出现错误 Fatal error Class engineer cannot extend from interface people in E
  • 正则表达式用于获取最后一个斜杠之后的所有内容[重复]

    这个问题在这里已经有答案了 我正在浏览 stackoverflow 并注意到用于匹配最后一个斜杠之后的所有内容的正则表达式是 例如 如果你有http www blah com blah test http www blah com blah
  • Java - 接口实现中的方法名称冲突

    如果我有两个接口 它们的用途完全不同 但具有相同的方法签名 那么如何使一个类实现这两个接口 而不必被迫编写一个为这两个接口服务的方法并在该方法中编写一些复杂的逻辑 检查正在进行的调用的对象类型并调用正确的代码的实现 在 C 中 这个问题可以
  • 将有角度的材料卡对齐在页面中心

    我制作了一个注册脚本 允许用户注册到我的网站 现在我遇到的问题是注册界面所在的有角材料卡不在中心 我尝试过很多事情 包括
  • WSO2 ESB:WSO2 REST API 调用中的 XML 响应未解析

    我在 WSO2 ESB 4 8 1 代理服务中处理来自 REST API 的纯 XML 响应时遇到问题 我的 outSequence 显然期望 API 调用结果有效负载是 SOAP 消息 但事实并非如此 纯 XML 从而在进一步处理它时导致
  • 是否可以在 ElasticSearch 中对嵌套文档进行排序?

    假设我有以下映射 site properties title type string description type string category type string tags type array point type geo p
  • 注释类型测试的超时参数

    我正在尝试在 IntelliJ IDEA 项目内的单元测试中使用注释类型测试的超时参数 第二个可选参数超时会导致测试失败 如果 花费的时间比指定的时钟时间长 以 毫秒 以下测试失败 Test timeout 100 public void
  • iPhone自动旋转动画

    是否可以关闭自动旋转动画 我希望它旋转 但我只是不希望发生动画 就像即时切换一样 如果你确实需要 只需使用setAnimationsEnabled of UIView void willRotateToInterfaceOrientatio
  • Spacemacs 中的 Org-mode:with-eval-after-load 和 extra-packages

    背景 Spacemacs 文档推荐 http spacemacs org layers emacs org README html important note您将其他组织模式配置包装在其中 with eval after load org
  • 如何在 Silverlight 中克隆路径资源?

    我的 Xaml 文件中定义了一个资源 如下所示
  • MVC 在剃刀中循环,生成的下拉列表未选择值

    我在 razor 中有一个循环 它会多次生成模板 模板内有一个下拉列表 Html DropDownlistFor x gt x pasajero i option Model optionItems 下拉列表已呈现 但未设置任何选项sele
  • 如何等待来自 WatiN 的 jQuery Ajax 请求完成?

    我在写WatiN http watin sourceforge net 测试来测试Ajax http en wikipedia org wiki Ajax 28programming 29Web 应用程序 并遇到了 Ajax 请求的计时问题
  • contenteditable div退格和删除文本节点问题

    contenteditable div 以及删除可编辑 div 内的 html 和 或非内容可编辑内容存在很多问题 使用优秀 Tim Down 的回答 如何删除具有 contentEditable 属性的 div 内的 HTML 元素 ht
  • 如何使用激活器调试Play应用程序?

    我知道对于经典的 Play 框架来说它是play debug run 我尝试跑步activator debug run但我收到以下错误 error Not a valid command debug similar idea error N
  • rake asset:预编译中止,无法推送到heroku

    我正在使用 Enki 博客 gem 它在本地工作 尝试准备推送到 heroku 以前从未遇到过问题 我尝试预编译 它做到了这一点 Users me rvm rubies ruby 1 9 3 rc1 bin ruby Users me rv
  • UITableView 背景颜色 iOS 9

    我有一个 UITableView 我想将其背景颜色设置为透明 界面生成器中表视图和所有子视图的背景颜色设置为透明 它适用于 iOS 8 和 7 但不适用于 iOS 9 有什么想法吗 cellForRowAtIndexPath 方法 cell
  • 如何将 Entity Framework 4.0 与 Xml 或内存存储(非 SQL)结合使用

    如何为实体框架模型指定 Xml 或仅指定内存存储 连接字符串需要提供程序 通常是 SQL 提供程序字符串 但它不会让我忽略提供者 我意识到我可以完全抛弃设计器生成的对象并采用纯 POCO 但随后我必须实现自己的序列化层 可以做到这一点 但对
  • 我无法修改的库中类的 Wcf 数据契约

    嗨 我有一个类库 它执行方法 并且有很多不同的类 它用作方法调用的参数 我正在为这个类库创建一个 wcf 包装器 但我无权更改类库 现在我的问题是如何轻松地将这些类公开为数据契约 数据成员 我有大约 100 个不同的类 我需要这些方法 Th