---
id: xmlrpcservice
title: 定义、发布、启动服务
---


## 定义服务

在**服务器**端中新建一个类，继承于**ServerProvider**类（或实现IServerProvider），然后在该类中写**公共方法**，并用**XmlRpc**属性标签标记，如果方法有**重载**，需要重新指定**函数键**。

- 支持代理生成**注释**。

```csharp
public class Server : ServerProvider
{
    [XmlRpc]
    public int Sum(int a, int b)
    {
        return a + b;
    }

    [XmlRpc]
    public int TestClass(MyClass myClass)
    {
        return myClass.A + myClass.B;
    }
}

public class MyClass
{
    public int A { get; set; }
    public int B { get; set; }
}

```

<a name="ai1L7"></a>

## 创建服务解析器

服务解析器是实际的服务接收、触发、调用、反馈的实际载体，通俗来说就是**通信服务器**。

```csharp
static IRpcParser CreateXmlRpcRpcParser()
{
    HttpService service = new HttpService();

    service.Setup(new RRQMConfig().UsePlugin()
        .SetListenIPHosts(new IPHost[] { new IPHost(7706) }))
        .Start();

    return service.AddPlugin<XmlRpcParserPlugin>()
         .SetProxyToken("RPC")
         .SetXmlRpcUrl("/xmlRpc");
}
```

<a name="iLCoX"></a>

## 注册、发布服务

添加解析器（添加时需要以键、值方式添加，方便后续查找），然后`注册服务`即可。

```csharp
static void Main(string[] args)
{
    RpcService rpcService = new RpcService();

    //添加解析器，解析器根据传输协议，序列化方式的不同，调用RPC服务
    rpcService.AddRpcParser("xmlRpcParser ", CreateXmlRpcRpcParser());

    //注册当前程序集的所有服务
    rpcService.RegisterAllServer();

    //分享代理，代理文件可通过RRQMTool远程获取。
    rpcService.ShareProxy(new IPHost(8848));

    //或者直接本地导出代理文件。
    //RpcProxyInfo proxyInfo = rpcService.GetProxyInfo(RpcType.RRQMRPC, "RPC");
    //string codeString = CodeGenerator.ConvertToCode("RRQMProxy", proxyInfo.Codes);

    Console.WriteLine("服务器已启动");
    Console.ReadKey();

}
```
