【问题标题】:Convert WCF protocol to class将 WCF 协议转换为类
【发布时间】:2023-03-07 12:00:02
【问题描述】:

我有具有类似属性的 WCF ServiceContract:

int P1 { [OperationContract()] get; [OperationContract()] set; }

我在客户端也需要同样的,但生成的协议给了我:

get_P1() 和 set_P1(int) 方法,所以我每次都需要手动创建另一个类接口:

int P1 { get { return get_P1() } ; set { et_P1(value) ; }

如何自动创建此类课程?

原因:我只想编辑界面和实现,其他的东西我想自动生成。

【问题讨论】:

    标签: c# wcf servicecontract


    【解决方案1】:

    您可以更改工具(svcutil 或“添加服务引用”)生成合同的方式,但这并不简单。您需要实现 WSDL 导入和代码生成扩展,然后将其连接到工具以在两种方法和属性之间进行转换。 http://blogs.msdn.com/b/carlosfigueira/archive/2011/10/18/wcf-extensibility-wsdl-import-and-code-generation-extensions.aspx 的帖子包含有关这些扩展的一些信息。

    另一种选择是在服务器和客户端之间共享合同 - 无需让工具生成客户端代理,您只需在客户端项目中复制(或引用)合同文件。

    所以,你可以这样做。但我认为你不应该。属性通常与对象状态的简单访问器相关联。拥有[OperationContract] 属性意味着访问属性的行为现在具有完整网络往返的潜在成本,以及它所需要的任何附加序列化/打包/框架。方法没有那种隐含的要求,因为它们可以(并且经常这样做)执行多个任务,包括调用其他方法。即使此时在属性访问器中有一个操作合约是有意义的,但几乎没有人接触代码也不是很自然,因此可能会导致将来出现维护问题。

    【讨论】:

    • 有点难以维护的解决方案,但解决方案,我会记住的。您如何看待 roslyn 的此类世代?
    • 我想可以做到(代码生成扩展使用CodeDom库)。但我仍然认为这是一个坏主意。想象一下有人在调试器中跨过代码,代理类的成员在“监视”窗口中。仅在调试器中查看对象的属性将导致进行网络调用。你不想去那里......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2021-01-27
    • 2016-06-26
    • 2018-05-27
    相关资源
    最近更新 更多