将webservice接口调用转化restfull接口

如果重新写restfull接口的话,定义各种DTO类型就是一个很大的工作量。考虑到webservcie已经定义了很多类型,所以打算采用反射的方式将webservice接口和方法全部提取出来,转化为restfull接口。

代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace XX.WebService.Test
{
    public class WebServcieToRestfull
    {
        /// <summary>
        /// 生成API接口
        /// </summary>
        public void GenerateApiInterfaceClasses()
        {
            var assembly = Assembly.Load("XX.WebService");
            var types = assembly.GetTypes();

            //方法,转换为API方法
            var typeList = new List<Type>();
            foreach (var type in types)
            {
                var attrs = type.GetCustomAttributes<System.Web.Services.WebServiceBindingAttribute>();
                if (attrs.Any())
                {
                    typeList.Add(type);
                }
            }
            foreach (var type in typeList)//接口类
            {
                var typeName = type.Name.Replace("Service", "");
                var methods = type.GetMethods();
                var clist = new List<string>();
                foreach (var m in methods)
                {
                    var mattr = m.GetCustomAttribute<System.Web.Services.Protocols.SoapDocumentMethodAttribute>();
                    if (mattr != null)//接口方法
                    {
                        var mname = m.Name.Substring(0, 1).ToUpper() + m.Name.Substring(1);
                        var paras = m.GetParameters();
                        var rtnType = string.Format("{0}", m.ReturnType.Name);
                        if (rtnType == "Void")
                        {
                            rtnType = string.Format("{0}Response", mname);
                        }

                        var mstr = GetAPIMethodStr(mname);
                        clist.Add(mstr);

                        if (paras.Any(p => p.IsOut))
                        {
                            var outParams = paras.Where(p => p.IsOut).ToArray();
                            var outMehodStr = GetAPIOutMethodStr(mname, outParams);
                            clist.Add(outMehodStr);
                        }
                    }
                }

                var classStr = string.Join("\r\n", clist);
                var fileStr = GetAPIInteraceNameSpaceStr(typeName, classStr);
                using (FileStream fsWrite = new FileStream("I" + typeName + "API.cs", FileMode.OpenOrCreate))
                {
                    byte[] myByte = System.Text.Encoding.UTF8.GetBytes(fileStr);
                    fsWrite.Write(myByte, 0, myByte.Length);
                };
            }
        }

        /// <summary>
        /// 生成API类
        /// </summary>
        public void GenerateApiClasses()
        {
            var assembly = Assembly.Load("XX.WebService");
            var types = assembly.GetTypes();

            //方法,转换为API方法
            var typeList = new List<Type>();
            foreach (var type in types)
            {
                var attrs = type.GetCustomAttributes<System.Web.Services.WebServiceBindingAttribute>();
                if (attrs.Any())
                {
                    typeList.Add(type);
                }
            }
            foreach (var type in typeList)//接口类
            {
                var typeName = type.Name.Replace("Service", "");
                var methods = type.GetMethods();
                var clist = new List<string>();
                foreach (var m in methods)
                {
                    var mattr = m.GetCustomAttribute<System.Web.Services.Protocols.SoapDocumentMethodAttribute>();
                    if (mattr != null)//接口方法
                    {
                        var mname = m.Name.Substring(0, 1).ToUpper() + m.Name.Substring(1);
                        var paras = m.GetParameters();
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

目标Web3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值