为什么要使用XMLRPC
我们在对接一些政府项目的时候往往会遇到使用一些老技术 列如XML PRC
介绍
xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。
xml的格式
请求格式
<?xml version="1.0" encoding="GBK" ?>
<methodCall>
<methodName>group.deleteGroup</methodName>
<params>
<param>
<value><int>16226</int></value>
</param>
</params>
</methodCall>
返回格式
<?xml version="1.0"?>
<methodResponse>
   <params>
      <param>
         <value><string>South Dakota</string></value>
         </param>
      </params>
   </methodResponse>
如何使用
库地址
https://github.com/Horizon0156/XmlRpc
如何使用
.Net Core WebApp作为服务端使用
- 安装 Horizon.XmlRpc.AspNetCore和Horizon.XmlRpc.Core包
- 注册服务端服务
  
  
 rpc url路径为http://:/rpc
- 创建AddService和IAddService类
 IAddService.cs
    public interface IAddService
    {
        /// <summary>
        ///     Adds the numbers.
        /// </summary>
        /// <returns> Sum of the numbers .</returns>
        /// <param name="numberA"> Summand a.</param>
        /// <param name="numberB"> Summand b.</param>
        [XmlRpcMethod("Demo.addNumbers")]
        int AddNumbers(int numberA, int numberB
            );
    }
AddService.cs
  public class AddService : XmlRpcService, IAddService
    {
        public int AddNumbers(int numberA, int numberB)
        {
            return numberA + numberB;
        }
    }
踩坑GBK的支持
encoding="GBK" 为GBK时需要额外配置
安装包
System.Text.Encoding.CodePages
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//注册Nuget包System.Text.Encoding.CodePages中的编码到.NET Core
XML格式支持
services.AddControllersWithViews().AddXmlSerializerFormatters();
.Net Core WebApp作为服务端使用
安转扩展
- 安装 Horizon.XmlRpc.Client包 和Horizon.XmlRpc.Core包
- 代码如下
 var proxy = XmlRpcProxyGen.Create<IAddServiceProxy>();
            proxy.Url = "http://127.0.0.1:5678";
            Console.WriteLine("Calling Demo.addNumbers with [3,4]...");
            var result = proxy.AddNumbers(3, 4);
            Console.WriteLine("Received result: " + result);
客户端实现
IAddServiceProxy
using Horizon.XmlRpc.Client;
namespace Horizon.XmlRpc.Core.ClientDemo
{
    public interface IAddServiceProxy : IXmlRpcProxy
    {
 [XmlRpcMethod("Demo.addNumbers")]
        int AddNumbers(int numberA, int numberB);
    }
}