---
id: generateproxydescription
title: 生成、获取代理
---

## 一、说明

使用rpc的原则就是像使用本地方法一样，让开发者感觉不到任何的不同。所以就必须把服务代理到本地，常见的方式有三种，**动态代理接口**，**静态织入**，**静态编译**。三种方式殊途同归，最终都是构建本地数据结构，然后和远程通信。三种方式各有优缺，具体如下：

| **优缺点** | **动态代理接口** | **静态织入（源代码生成）** | **静态编译** |
| --- | --- | --- | --- |
| **优点** | 动态构建类，灵活、适应性强。 | 静态代码生成，自定义类参数自动生成，修改较灵活，调用效率高 | 自定义类参数自动生成，密封性强，安全性高，调用效率高。 |
| **缺点** | 调用效率较低，自定义类参数须自行构建，实现须IL支持，对调用平台有要求，例如：IOS不允许动态类生成，则不可使用。 | 项目代码管理难统一，强迫症猝死 | 服务一旦有破坏性升级，则必须重新替换dll，灵活性几乎为0。 |

:::tip 提示

该内容，对 [TouchRpc](.//touchrpcdescription.mdx)、[JsonRpc](.//jsonrpcdescription.mdx)、[XmlRpc](.//xmlrpcdescription.mdx)、[WebApi](.//webapidescription.mdx)均适用。

:::  


## 二、服务端源文件代理和源代码生成接口代理

### 2.1 区别

开源版不支持**源代码生成接口代理**，Pro全部支持。

### 2.2 场景对比

假设一个场景，你需要开发服务器和客户端。

这时，如果你使用**服务端源文件代理**，则需要做：

1. 定义一个服务项目（可以写接口，也可以直接写逻辑，当然也可以分成两个项目）
2. 编译项目，然后导出代理源代码。
3. 将导出的源代码引用到客户端

如果你使用**源代码生成接口代理**，则需要做：

1. 单独定义一个接口项目，用于存放服务接口，和接口所需的参数类型实体。
2. 再定义一个接口实现项目，用于实现服务接口。
3. 编译接口项目，将编译好的dll，引用到需要的客户端

:::tip 效果

上述步骤如果全部完成，两种方式在客户端的使用效果基本完全一样。

:::  
