c# - 序列化对函数的调用

标签 c# wcf command-pattern

我需要在我的应用程序中实现任务的概念。 在我的项目中,任务是必须执行的操作,并由名称标识:每个任务也有输入参数(类型和值)并产生一个或多个输出。

必须实现任务类,如何表达“有某种结果的操作”的概念?我可以将操作的名称存储在一个字符串属性中,但是我该如何表达这个操作返回的类型呢? 同样,当这些参数也可能是不同类型时,如何实现操作的输入参数列表?

目标是序列化任务对象并将其发送到另一个节点。接收者解析接收到的Task对象,读取操作名称并执行相应的函数。

例如,假设节点A和节点B“拥有”以下方法……

节点A的服务:

- double getAreaOfRectangle(double length, double width);
- double getAreaOfTriangle(double base, double height);
- double getAreaOfParallelogram(double base, double height).

节点B的服务:

- double getAreaOfCircle(double radius);
- double getAreaOfTrapezoid(double base1, double base2, double height).

如果节点C需要计算一个矩形的面积,它知道它必须联系节点A并通过指定操作(double areaOfRectangle)和输入(双倍宽度和双倍高度)。 同样,如果节点C需要计算圆的面积,它必须向节点B发送消息,指定操作和半径的长度。 为了发送输入,因为它们可以是不同的类型(甚至是新的用户定义类型),我可以使用一个对象数组...

一些任务可能依赖于其他任务,即输入参数可能至少有另一个任务的一个输出,所以我还需要实现一个任务的输出和另一个任务的输入之间的链接。

我应该如何继续定义类?

最佳答案

您应该考虑在 .NET 4.0 中使用表达式树。有关详细信息,请参阅本文

Serializing and Deserializing Expression Trees in C#

关于c# - 序列化对函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7787013/

相关文章:

c# - 为什么我的 POST 方法不起作用?

domain-driven-design - 如何为在一个上下文中是聚合根但在另一上下文中不是聚合根的实体编写命令?

c# - 使用 Newtonsoft.json 自定义反序列化

java - C# Bouncy CaSTLe AES 解密 + GZ 解压缩 - 不同长度数据失败

c# - Asp .Net Gridview 分页

c# - 在没有数据重复的情况下转换/实例化/转换为子类/父类(super class)

WCF命名管道IPC

c# - 代理设置设置为 "Use automatic configuration script"的 WCF 客户端

multithreading - 如何在顺序图中显示将命令提交到线程池中

design-patterns - 对命令模式感到困惑