C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 外部服务调用、内部服务调用优化,面向服务化的

时间:2023-02-10 19:58:23

C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 外部服务调用、内部服务调用优化,面向服务化的

现在的信息系统越来越复杂,越来越庞大,不仅需要内部是一个整体,而且还需要提供很多对外的服务调用。

1:别人如何调用最方便?用不同的开发语言调用、例如app、手持设备、服务器。
2:服务的返回状态是什么样子的?有利于排查问题。
3:服务的安全性、可过渡升级性、性能效率要有保障。
4:服务也需要有完整的调用日志记录等。

下面是一个服务调用有效性判断的函数代码,供大家参考。

 //-----------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2015 , Hairihan TECH, Ltd.
//----------------------------------------------------------------- using System;
using System.Collections.Generic;
using System.Data;
using ServiceStack.Redis; namespace DotNet.Business
{
using DotNet.Model;
using DotNet.Utilities; /// <summary>
/// BaseServiceSettingManager
/// 服务管理
///
/// 修改纪录
///
/// 2015.12.25 版本:1.0 JiRiGaLa 主键整理。
///
/// <author>
/// <name>JiRiGaLa</name>
/// <date>2015.12.25</date>
/// </author>
/// </summary>
public partial class BaseServiceSettingManager : BaseManager
{
/// <summary>
/// 检查一个服务调用是否是允许调用的?
/// 1:是否要记录日志?
/// 2:是否需要埋点?检查性能?访问频率等?调用次数?
/// 3:非合法的调用?是否日志记录?
/// 4:异常的要进行处理?
/// </summary>
/// <param name="appKey">应用唯一标识</param>
/// <param name="appSecret">应用的签名密钥</param>
/// <param name="callLimit">是否进行限制</param>
/// <param name="systemCode">访问子系统</param>
/// <param name="permissionCode">判断的权限编号</param>
/// <returns>验证情况</returns>
public static BaseResult CheckService(string appKey, string appSecret, bool callLimit = false, string systemCode = "Base", string permissionCode = null)
{
BaseResult result = new DotNet.Utilities.BaseResult();
result.Status = false; // AppKey: 23286115
// AppSecret: c8d1f06f599d7370467993c72a34c701
// permissionCode: "User.Add" string ipAddress = Utilities.GetIPAddress(true); // 1: 判断参数是否合理?目标服务,总不可以为空,否则怎么区别谁在调用这个服务了?
if (string.IsNullOrEmpty(appKey))
{
result.StatusCode = "AccessDeny";
result.StatusMessage = "appKey为空、访问被拒绝";
return result;
} // 2: 判断是否在接口角色里, 只有在接口角色里的,才可以进行远程调用,这样也方便把接口随时踢出来。
string roleCode = "Interface";
if (!BaseUserManager.IsInRoleByCache(systemCode, appKey, roleCode))
{
result.StatusCode = "AccessDeny";
result.StatusMessage = "非接口用户、访问被拒绝";
return result;
} // 3: 判断调用的频率是否?这里需要高速判断,不能总走数据库?调用的效率要高,不能被远程接口给拖死了、自己的服务都不正常了。
if (callLimit && PooledRedisHelper.CallLimit(appKey, , ))
{
result.StatusCode = "AccessDeny";
result.StatusMessage = "访问频率过高、访问被拒绝";
return result;
} // 4: 判断签名是否有效?是否过期?可以支持多个签名,容易升级、容易兼容、容易有个过度的缓冲期。为了提高安全性,必须要有签名才对。
if (!BaseServiceSettingManager.CheckServiceByCache(appKey, appSecret))
{
result.StatusCode = "AccessDeny";
result.StatusMessage = "不合法签名、访问被拒绝";
return result;
} // 5: 判断对方的ip是否合法的?1个服务程序,可以有多个ip。可以把服务当一个用户看待,一个目标用户可能也配置了多个服务,一般是远程连接。
BaseUserLogOnManager userLogOnManager = new BaseUserLogOnManager();
BaseUserLogOnEntity userLogOnEntity = userLogOnManager.GetObject(appKey);
if (BaseUserManager.CheckIPAddressByCache(userLogOnEntity, ipAddress, true))
{
result.StatusCode = "AccessDeny";
result.StatusMessage = "不合法IP、访问被拒绝";
return result;
} // 6: 判断是否有权限?防止被过渡调用,拖死数据库,可以用缓存的方式进行判断,这样不容易被客户端、合作伙伴拖垮。
if (!string.IsNullOrEmpty(permissionCode) && !BasePermissionManager.IsAuthorizedByCache(systemCode, appKey, permissionCode))
{
result.StatusCode = "AccessDeny";
result.StatusMessage = "无权限 " + permissionCode + "、访问被拒绝";
return result;
} // 7: 判断是否有效?判断时间是否对?
BaseUserManager userManager = new BaseUserManager();
BaseUserEntity userEntity = userManager.GetObject(appKey);
UserLogOnResult userLogOnResult = userManager.CheckUser(userEntity, userLogOnEntity);
if (!string.IsNullOrEmpty(userLogOnResult.StatusCode))
{
BaseLoginLogManager.AddLog(systemCode, userEntity, ipAddress, string.Empty, string.Empty, userLogOnResult.StatusMessage);
result.StatusCode = userLogOnResult.StatusCode;
result.StatusMessage = userLogOnResult.StatusMessage;
return result;
} // 8:目前需要判断的,都加上了。
result.Status = true;
return result;
}
}
}

有经得起考验的,稳定的系统代码,干啥都会更顺利一些,更快一些,开展工作也会更顺一些。遇到的挫折也会少一些。

C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 外部服务调用、内部服务调用优化,面向服务化的的更多相关文章

  1. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 角色权限的配置页面改进优化

    往往开发的人不是维护的人,开发的单位不是维护的单位.信息的畅通沟通交流很多时候会有打折.扭曲.甚至是容易得到歪解.配置错业务操作权限.为了防止发生没必要的麻烦,甚至是发生重大错误,我们的软件需要不断换 ...

  2. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 &ndash&semi; 员工离职管理

    C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 – 员工离职管理 当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学 ...

  3. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;1 版本 - 面向数据库SQL语句的应用开发二

    很多传统企业.包括系统集成类的IT企业,若不是从事专业软件开发领域的,能做出一套适合本公司企业信息化的灵活的信息系统还是很有难度的,还有一些已经多年不写程序的资深开发人员,初学者,都难把一个整套系统实 ...

  4. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 适合大型企业信息化应用使用的角色权限管理体系

    每个人外表看看都没什么大区别.但是内在的知识.处理问题的能力.解决问题的能力.头脑灵活性都会有很大的差距.软件组件也是一样,有些组件编写厉害,想问题深入,能处理的难题也多,构思巧妙. 通用快速开发平台 ...

  5. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 几十套业务系统集中统一授权管理实现经验分享

    由于这几年互联网电商的快速发展,快递公司也进入了快速发展的绝好快速成长期.随着社会的强劲需求公司的业绩年年攀新高.快速发展的公司都需要有强大的IT信息系统,硬件设备基本上款到了货也可以到了,但是软件系 ...

  6. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 大型软件系统客户端数据同步的问题解决

    作为一个完整的整体信息化解决方案需要有足够强大的各种功能,这些功能相对独立,又互相依存.当有需要这样的功能时可以随时拿出来用,适当修改一下就可以满足要求.只有这样才能快速开发各种信息化系统,才能满足各 ...

  7. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 基于数据库资源的多语言实现

    以前的开发平台里,是用xml语言包实现了多语言功能,现在新的平台里进行了调整,把多语言包资源放在数据库表里实现了. 我们系统预留了多语言的配置全局变量.可以通过配置这个参数达到切换多语言的目的 我们在 ...

  8. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 总部业务部门主管管理整个集团分公司的某项业务

    由于整个集团公司非常庞大,有上千个分支机构,不可能由总部某个人能管理所有的数据,或者掌握所有的业务.某个业务都会由于某个相应的部门进行管理,例如所有分公司的人力资源,都由总部的人力资源部门管理.哪些分 ...

  9. C&num;&period;NET 大型企业信息化系统集成快速开发平台 4&period;2 版本 - 面向全国标准省市县行政数据基础之上的组织机构管理

    由于信息系统庞大.各种业务子系统.各种开发语言开发的业务逻辑.各种年代维护的代码.各种参差不齐的历史遗留信息系统,面向全国的业务系统,面向某个领域的汽运管理信息系统,面向内部的业务系统,面向外部的各种 ...

随机推荐

  1. Android SDK Android NDK Android Studio 官方下载地址

    2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...

  2. python tuple 操作

    特点:不可改(与字符串一样.不允许删除和修改) 操作:1.print 可使用跟%的元祖  print( '%s is %d years old' % (name, age)) 2.像列表一样有索引 3 ...

  3. 《转载》深入理解 cocos2d-x 坐标系

    原文地址:http://www.cnblogs.com/lyout/p/3292702.html. 首先我们添加两个测试精灵(宽:27,高:40)到场景里面: CCSprite *sprite1 = ...

  4. USB系列之九:基于ASPI的U盘驱动程序

    USB系列之七和之八介绍了ASPI,并通过一些实例说明了基于ASPI的编程方法,本文使用前两篇文章介绍的知识以及以前介绍的有关DOS驱动程序下驱动程序的内容实际完成一个简单的基于ASPI的U盘驱动程序 ...

  5. PHP - 发送短信

    1.购买服务 我购买的是在百度进行推广的API服务.按照要求进行购买就好,之后获取自己的apikey. 2.将提供的代码修改后集成到项目中: <?php /** * * * 发送短信 * * * ...

  6. tnvm 安装模块不能找到关联模块问题

    export NODE_PATH='/Users/yuqi/.tnvm/lib/node_modules' export PATH='/Users/yuqi/.tnvm/bin':$PATH sour ...

  7. MySQL没有备份怎么恢复被drop的表&lpar;利用undrop-for-innodb&rpar;

    介绍:     也许大家都难以理解,这么重要的数据为啥不备份(或者备份不可用)?而且还任性的drop table了.显然有备份是最好的,但是它们并不总是可用的.这种情况令人恐惧,但并非毫无希望.在许多 ...

  8. Python 爬虫入门(四)—— 验证码上篇(主要讲述验证码验证流程,不含破解验证码)

    本篇主要讲述验证码的验证流程,包括如何验证码的实现.如何获取验证码.识别验证码(这篇是人来识别,机器识别放在下篇).发送验证码.同样以一个例子来说明.目标网址 http://icp.alexa.cn/ ...

  9. python 全栈开发,Day33&lpar;tcp协议和udp协议&comma;互联网协议与osi模型&comma;socket概念&comma;套接字&lpar;socket&rpar;初使用&rpar;

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  10. layui禁用侧边导航栏点击事件

    layui是一款优秀的前端模块化css框架,作者是贤心 —— 国内的一位前端大佬. 我用layui做过两个完整的项目,对她的感觉就是,这货非常适合做后台管理界面,且基于jquery,很容易上手.当然, ...