---
id: createrpcserver
sidebar_position: 1
title: 创建rpc服务
sidebar_label: a.创建rpc服务
---
## 一、说明
RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。
过程是什么? 过程就是业务处理、计算任务,更直白的说,就是程序,就是想调用本地方法一样调用远程的过程。
TouchRpc支持服务器与客户端互相调用,也支持客户端之间相互调用。
## 二、定义服务
1. 在**被调用**端中新建一个类名为**MyRpcServer**。
2. 继承于RpcServer类、或实现IRpcServer。亦或者将服务器声明为**瞬时生命**的服务,继承TransientRpcServer、或ITransientRpcServer。
3. 在该类中写**公共方法**,并用**TouchRpc**属性标签标记。
```csharp
public class MyRpcServer : RpcServer
{
[Description("登录")]//服务描述,在生成代理时,会变成注释。
[TouchRpc("Login")]//服务注册的函数键,此处为显式指定。默认不传参的时候,为该函数类全名+方法名的全小写。
public bool Login(string account,string password)
{
if (account=="123"&&password=="abc")
{
return true;
}
return false;
}
}
```
**瞬时生命**的服务,最大的特点就是,每个请求,都会创建一个新的服务类对象。然后可以通过**this.CallContext**直接访问当前的调用上下文。
```csharp
public class MyRpcServer : TransientRpcServer
{
[Description("登录")]//服务描述,在生成代理时,会变成注释。
[TouchRpc("Login")]//服务注册的函数键,此处为显式指定。默认不传参的时候,为该函数类全名+方法名的全小写。
public bool Login(string account,string password)
{
if (account=="123"&&password=="abc")
{
return true;
}
return false;
}
}
```
## 三、启动rpc服务器
以下仅示例基于Tcp协议TouchRpc。其他协议的服务器请看[创建TouchRpc服务器](<..\7.2 创建TouchRpc服务器.md>)
```csharp
var service =new TcpTouchRpcService();
TouchSocketConfig config= new TouchSocketConfig()//配置
.SetListenIPHosts(new IPHost[] { new IPHost(7789) })
.ConfigureRpcStore(a=>
{
a.RegisterServer();//注册服务
})
.SetVerifyToken("TouchRpc");
service.Setup(config)
.Start();
service.Logger.Info($"{service.GetType().Name}已启动");
```
####