定义服务

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

  • 支持代理生成注释。 ```csharp public class Server : ServerProvider { [XmlRpc] public int Sum(int a, int b) {

    1. return a + b;

    }

    [XmlRpc] public int TestClass(MyClass myClass) {

    1. return myClass.A + myClass.B;

    } }

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

  1. <a name="ai1L7"></a>
  2. ## 创建服务解析器
  3. 服务解析器是实际的服务接收、触发、调用、反馈的实际载体,通俗来说就是**通信服务器**。
  4. ```csharp
  5. static IRpcParser CreateXmlRpcRpcParser()
  6. {
  7. HttpService service = new HttpService();
  8. service.Setup(new RRQMConfig().UsePlugin()
  9. .SetListenIPHosts(new IPHost[] { new IPHost(7706) }))
  10. .Start();
  11. return service.AddPlugin<XmlRpcParserPlugin>()
  12. .SetProxyToken("RPC")
  13. .SetXmlRpcUrl("/xmlRpc");
  14. }

注册、发布服务

添加解析器(添加时需要以键、值方式添加,方便后续查找),然后注册服务即可。

  1. static void Main(string[] args)
  2. {
  3. RpcService rpcService = new RpcService();
  4. //添加解析器,解析器根据传输协议,序列化方式的不同,调用RPC服务
  5. rpcService.AddRpcParser("xmlRpcParser ", CreateXmlRpcRpcParser());
  6. //注册当前程序集的所有服务
  7. rpcService.RegisterAllServer();
  8. //分享代理,代理文件可通过RRQMTool远程获取。
  9. rpcService.ShareProxy(new IPHost(8848));
  10. //或者直接本地导出代理文件。
  11. //RpcProxyInfo proxyInfo = rpcService.GetProxyInfo(RpcType.RRQMRPC, "RPC");
  12. //string codeString = CodeGenerator.ConvertToCode("RRQMProxy", proxyInfo.Codes);
  13. Console.WriteLine("服务器已启动");
  14. Console.ReadKey();
  15. }