说到.Net的RPC,大家首先想到的是微软自己的WCF,然后就是谷歌的gRPC,然后然后视乎没有更好的选择。
更加麻烦的是这些解决方案,对原有项目几乎都要推到重建;
这个给大家推荐一个代码侵入性小,学习成本低的.Net的RPC;
实现思路和其他的RPC有本质的区别
1.利用接口实现AOP参数拦截;
2.使用.Net动态编译技术,在客户端生成接口实体代理类方法;
3.通过TCP建立连接,把参数和执行方法发送到服务器;[数据传输协议下文章专题介绍]
4.服务器在解析数据,映射实体类,委托运行;
5.运行结果转换成JSON,发送给客户端,有代理类返回实现;
说了技术实现原理,我们来看看怎么用吧;
Install-Package UcAsp.RPC
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="service">
<section name="server" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
</sectionGroup>
</configSections>
<service>
<server>
<add key="port" value="9966" /> <!--服務器端口--->
<add key="username" value="admin" />
<add key="password" value="admin" />
</server>
<assmebly>
<add key="Face" value="Face.dll" /><!--需要被外部應用的類庫--->
</assmebly>
</service>
</configuration>
标签assmebly表示,如果客官您是按照三层模式编写的代码,那么就是Bll的dll;
服务器端启动一个服务
代码如下
ApplicationContext context = new ApplicationContext();
context.Start(AppDomain.CurrentDomain.BaseDirectory+ "Application.config", AppDomain.CurrentDomain.BaseDirectory);
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="client">
<section name="server" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
</sectionGroup>
</configSections>
<client>
<server>
<add key="ip" value="127.0.0.1:9966" /> <!---服務器地址--->
<add key="mode" value="tcp" />
<add key="pool" value="10" />
<add key="username" value="admin" />
<add key="password" value="admin" />
</server>
<relation>
<add key="ISCS.WMS2.Model" value="ISCS.WMS2.Model.dll" /><!--関聯類庫-->
</relation>
</client>
</configuration>
标签relation 注意了是指bll返回类型会依赖的类;
static ApplicationContext context= new ApplicationContext();
context.Start(AppDomain.CurrentDomain.BaseDirectory + "Application.config", AppDomain.CurrentDomain.BaseDirectory);
IFace.ITest clazz = context.GetProxyObject();
int o = (int)i;
string x = clazz.R(ref o);
如有疑问欢迎到网站留言:http://www.ucasp.net
丰富接口: