远程表达式链是一个可独立于具体 RPC 实现的通用组件,可以用于实现内部服务无 API 化,客户端可以灵活自主的调用服务端暴露的字段 / 属性 / 函数。
该功能需要在工程项目中配置静态代码生成

1. 根据需求给需要暴露的 class / struct 添加 partial 修饰符,如果该 class 是一个嵌套类型,需要给所有上级 class 都添加 partial 修饰符,因为静态代码生成需要与它公用同一个类型以生成远程表达式节点信息。

2. 给该 class / struct 添加远程表达式类型申明配置 [AutoCSer.Net.RemoteExpression.Type],并给需要暴露的成员添加远程表达式成员申明配置 [AutoCSer.Net.RemoteExpression.Member]

3. 给该工程项目配置静态代码生成并编译项目,然后将生成的远程表达式节点信息代码源文件 {项目名称}.AutoCSer.cs 添加到项目中。由于远程表达式节点信息可能存在相互引用,可能需要连续编译三次调用代码生成才能生成包含完整的远程表达式节点信息代码的程序集。

AutoCSer 中的 RPC 框架都集成支持远程表达式链,但是由于安全问题默认是禁用状态,需要在相关服务的申明配置中设置 IsRemoteExpression = true,比如

启用支持远程表达式支持 参考示例 AutoCSer\Example\TcpStaticServer\RefOut.cs
内部静态服务(含泛型示例) 参考示例 AutoCSer\Example\TcpStaticServer\Expression.cs

下面是各 RPC 框架的调用示例

TCP 接口服务框架

内部服务 参考示例 AutoCSer\Example\TcpInterfaceServer\Expression.cs
开放服务 参考示例 AutoCSer\Example\TcpInterfaceOpenServer\Expression.cs

TCP 函数服务框架

内部静态服务(含泛型示例) 参考示例 AutoCSer\Example\TcpStaticServer\Expression.cs
内部实例服务 参考示例 AutoCSer\Example\TcpInternalServer\Expression.cs
开放服务 参考示例 AutoCSer\Example\TcpOpenServer\Expression.cs

TCP 接口应答流服务框架

内部服务 参考示例 AutoCSer\Example\TcpInterfaceStreamServer\Expression.cs
开放服务 参考示例 AutoCSer\Example\TcpInterfaceOpenStreamServer\Expression.cs

TCP 函数应答流服务框架

内部静态服务 参考示例 AutoCSer\Example\TcpStaticStreamServer\Expression.cs
内部实例服务 参考示例 AutoCSer\Example\TcpInternalStreamServer\Expression.cs
开放服务 参考示例 AutoCSer\Example\TcpOpenStreamServer\Expression.cs

TCP 接口同步应答服务框架

内部服务 参考示例 AutoCSer\Example\TcpInterfaceSimpleServer\Expression.cs
开放服务 参考示例 AutoCSer\Example\TcpInterfaceOpenSimpleServer\Expression.cs

TCP 函数同步应答服务框架

内部静态服务 参考示例 AutoCSer\Example\TcpStaticSimpleServer\Expression.cs
内部实例服务 参考示例 AutoCSer\Example\TcpInternalSimpleServer\Expression.cs
开放服务 参考示例 AutoCSer\Example\TcpOpenSimpleServer\Expression.cs