在B/S开发中,涉及到获取系统基础资料的问题,因为是在不同平台下的开发,采用了WCF方式获取。

下面是一个调用通用权限管理系统(吉日嘎拉)基础信息资料的一个demo供参考

调用原理图:

web.configWCF配置参考

web.config 相关配置

  1. <system.serviceModel>
  2. <client>
  3. <endpoint address="http://192.168.1.199/PermissionService.asmx"
  4. binding="basicHttpBinding" bindingConfiguration="PermissionServiceSoap"
  5. contract="WebPermission.PermissionServiceSoap" name="PermissionServiceSoap">
  6. </endpoint>
  7. <endpoint address="net.tcp://192.168.1.199:9999/DotNet.Business/BaseItemDetailsService/" behaviorConfiguration="Internet" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.Business.IBaseItemDetailsService" name="DotNet.Business.BaseItemDetailsService">
  8. <identity>
  9. <dns value="192.168.1.199" />
  10. </identity>
  11. </endpoint>
  12. <endpoint address="net.tcp://192.168.1.199:9999/DotNet.Business/BaseItemsService/" behaviorConfiguration="Internet" binding="netTcpBinding" bindingConfiguration="netTcpBindingSmiple" contract="DotNet.Business.IBaseItemsService" name="DotNet.Business.BaseItemsService">
  13. <identity>
  14. <dns value="192.168.1.199" />
  15. </identity>
  16. </endpoint>
  17. </client>
  18. <behaviors>
  19. <endpointBehaviors>
  20. <behavior name="Internet">
  21. </behavior>
  22. </endpointBehaviors>
  23. </behaviors>
  24. <bindings>
  25.  
  26. <basicHttpBinding>
  27. <binding name="PermissionServiceSoap" />
  28. <binding name="basicHttpBindingSmiple" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
  29. <security mode="None">
  30. <transport clientCredentialType="Windows" />
  31. </security>
  32. </binding>
  33. </basicHttpBinding>
  34.  
  35. <netTcpBinding>
  36. <binding name="netTcpBindingSmiple" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
  37. <security mode="None">
  38. <transport clientCredentialType="Windows" />
  39. <message clientCredentialType="Windows" />
  40. </security>
  41. </binding>
  42. </netTcpBinding>
  43.  
  44. </bindings>
  45.  
  46. </system.serviceModel>

注意:下面的userInfo是登录通用权限管理系统后的用户信息表,登录后需要设置对应的安全认证信息。

页面

  1. /// <summary>
  2. /// 基本信息表表名
  3. /// </summary>
  4. protected string itemName = string.Empty;
  5. /// <summary>
  6. /// 输出的json内容
  7. /// </summary>
  8. protected string jsonStr = string.Empty;
  9. protected void Page_Load(object sender, EventArgs e)
  10. {
  11. Response.ContentType = "application/json";
  12. itemName = string.IsNullOrWhiteSpace(RequestString("itemName")) || string.Equals(RequestString("itemName"), "null", StringComparison.OrdinalIgnoreCase) ? string.Empty : RequestString("itemName").Trim();
  13. if (!string.IsNullOrWhiteSpace(itemName) && !string.IsNullOrWhiteSpace(itemName))
  14. {
  15. using (DataTable dt = ItemsManager.GetItemsDB(userInfo, "ItemsClass"))
  16. {
  17. //过滤 显示或不显示 DeletionStateCode为0的字段显示,Enabled为1的字段
  18. BaseBusinessLogic.SetFilter(dt, BaseItemDetailsEntity.FieldDeletionStateCode, "0");
  19. BaseBusinessLogic.SetFilter(dt, BaseItemDetailsEntity.FieldEnabled, "1");
  20. DataTable dtNew = new DataTable();
  21. dtNew.Columns.Add("key", typeof(string));
  22. dtNew.Columns.Add("value", typeof(string));
  23. for (int i = 0; i < dt.Rows.Count; i++)
  24. {
  25. DataRow row = dtNew.NewRow();
  26. row["key"] = dt.Rows[i]["ITEMNAME"];
  27. row["value"] = dt.Rows[i]["ITEMVALUE"];
  28. dtNew.Rows.Add(row);
  29. }
  30. jsonStr = DataTableHelper.DataTable2Json(dtNew);
  31. }
  32. }
  33. else
  34. {
  35. jsonStr = "{\"list\":[{\"key\":\"出错了\",\"value\":\"取数据出错\",\"myFlag\":\"没有传入参数值\"}]}";
  36. }
  37. Response.Write(jsonStr);
  38. Response.End();
  39. }

 业务层

  1. using System.Collections.Generic;
  2. using System.Data;
  3. using System.Web;
  4. namespace TransferFees.BLL
  5. {
  6. using System;
  7. using System.Web.Caching;
  8. using DotNet.Business;
  9. using DotNet.Utilities;
  10. using TransferFees.DAL;
  11. using TransferFees.Foundation;
  12. /// <summary>
  13. /// 获取基础信息表资料业务类
  14. /// 以安全的WCF方式访问
  15. /// 1,增加缓存功能
  16. ///
  17. /// <author>
  18. /// <name>songbiao</name>
  19. /// <date>2014.03.18</date>
  20. /// </author>
  21. /// </summary>
  22. /// </summary>
  23. /// </summary>
  24. public class ItemsManager
  25. {
  26. /// <summary>
  27. /// 获得基础信息表资料
  28. /// 通过安全的WCF服务方式调用
  29. /// 传入的用户实体含有配置的加密信息
  30. /// </summary>
  31. /// <param name="userInfo">用户实体</param>
  32. /// <param name="itemName">要查询的基础信息表的表名</param>
  33. /// <returns></returns>
  34. public static DataTable GetItemsDB(BaseUserInfo userInfo, string itemName, bool refreshFlag = false)
  35. {
  36. string key = "GetItemsDB";
  37. if (refreshFlag)
  38. {
  39. HttpContext.Current.Cache.Remove(key);
  40. }
  41. if (HttpContext.Current.Cache[key] == null)
  42. {
  43. lock (userInfo)
  44. {
  45. if (HttpContext.Current.Cache[key] == null)
  46. {
  47. DataTable dtRes = ItemsServices.GetItemsDB(userInfo, itemName);
  48. CacheItemRemovedCallback onRemoveCallback = new CacheItemRemovedCallback(CacheHelper.CacheItemRemovedCallback);
  49. HttpContext.Current.Cache.Add(key, dtRes, null, DateTime.Now.AddMinutes(30.0), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemoveCallback);
  50. }
  51. }
  52. }
  53. return HttpContext.Current.Cache[key] as DataTable;
  54. }
  55.  
  56. /// <summary>
  57. /// 获得基础信息表资料
  58. /// 用户实体含有配置的加密信息
  59. /// </summary>
  60. /// <param name="userInfo">用户实体</param>
  61. /// <param name="itemName">要查询的基础信息表的表名</param>
  62. /// <returns></returns>
  63. public static List<BaseItemDetailsEntity> GetItemsList(BaseUserInfo userInfo, string itemName, bool refreshFlag = false)
  64. {
  65. string key = "GetItemsList";
  66. if (refreshFlag)
  67. {
  68. HttpContext.Current.Cache.Remove(key);
  69. }
  70. if (HttpContext.Current.Cache[key] == null)
  71. {
  72. lock (userInfo)
  73. {
  74. if (HttpContext.Current.Cache[key] == null)
  75. {
  76. List<BaseItemDetailsEntity> listRes = ItemsServices.GetItemsList(userInfo, itemName);
  77. CacheItemRemovedCallback onRemoveCallback = new CacheItemRemovedCallback(CacheHelper.CacheItemRemovedCallback);
  78. HttpContext.Current.Cache.Add(key, listRes, null, DateTime.Now.AddMinutes(30.0), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemoveCallback);
  79. }
  80. }
  81. }
  82. return HttpContext.Current.Cache[key] as List<BaseItemDetailsEntity>;
  83. }
  84. }
  85. }

数据访问层

  1. using System.Collections.Generic;
  2. using System.Data;
  3. using DotNet.Business;
  4. using DotNet.Utilities;
  5.  
  6. namespace TransferFees.DAL
  7. {
  8. /// <summary>
  9. /// 获取基础信息表资料服务类
  10. /// 以安全的WCF方式访问
  11. ///
  12. /// <author>
  13. /// <name>songbiao</name>
  14. /// <date>2014.03.18</date>
  15. /// </author>
  16. /// </summary>
  17. /// </summary>
  18. /// </summary>
  19. public class ItemsServices
  20. {
  21. /// <summary>
  22. /// 获得基础信息表资料
  23. /// 通过安全的WCF服务方式调用
  24. /// 用户实体含有配置的加密信息
  25. /// </summary>
  26. /// <param name="userInfo">用户实体</param>
  27. /// <param name="itemName">要查询的基础信息表的表名</param>
  28. /// <returns></returns>
  29. public static DataTable GetItemsDB(BaseUserInfo userInfo,string itemName)
  30. {
  31. DotNetService dotNetService = new DotNetService("DotNet.WCFClient");
  32. return dotNetService.BaseItemDetailsService.GetDataTable(userInfo, itemName);
  33. }
  34. /// <summary>
  35. /// 获得基础信息表资料
  36. /// 用户实体含有配置的加密信息
  37. /// </summary>
  38. /// <param name="userInfo">用户实体</param>
  39. /// <param name="itemName">要查询的基础信息表的表名</param>
  40. /// <returns></returns>
  41. public static List<BaseItemDetailsEntity> GetItemsList(BaseUserInfo userInfo, string itemName)
  42. {
  43. DotNetService dotNetService = new DotNetService("DotNet.WCFClient");
  44. return dotNetService.BaseItemDetailsService.GetList(userInfo, "ItemsClass");
  45. }
  46. }
  47. }

这段时间一直在基于吉日嘎拉的通用权限管理系统上做开发,真心感觉他真的是很强大,

他真的不仅仅是一套权限管理系统,底层涉及到的安全问题考虑的也非常全面

用上这套权限管理系统,我们只需关心业务就行了,时间对开发人员、对公司来说都非常重要,有一个好的选择我们一定要用上。

今后有机会会分享更多的应用,欢迎使用过这套系统的朋友一起交流。

以WCF安全认证方式调用通用权限管理系统获取基础信息资料的更多相关文章

  1. 通用权限管理系统接口文档V4.2 版本之消息接口介绍

    通用权限管理系统提供的消息接口可实现消息获取,消息发送,底层使用Redis对消息进行缓存,解决消息的并发请求对数据库的压力. 前端可以通过客户端轮询来获取最新消息,前端效果截图如下:

  2. 如何在通用权限管理系统中集成log4net日志功能

    开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个 ...

  3. 通用权限管理系统底层更换最新Oracle驱动的方法

    通用权限管理系统底层先前访问Oracle数据库时需要客户端安装驱动软件,如下图: 安装完毕还需要一番配置,系统再引用其dll, 现在我们使用了最新的dll 该dll是Oracle出的最新的版本. 通用 ...

  4. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统

    一.前言 在大型的信息管理系统中,经常涉及到权限管理系统 下面来个 demo,很多复杂的系统的设计都来自它 代码已经放到github上了,地址:https://github.com/larger5/s ...

  5. Net 通用权限管理系统源码 带数据库设计文档,部署说明文档

    Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389

  6. 通用权限管理系统数据字典 V3.9 版本,欢迎开发个各种业务系统的朋友们,参考表结构

    C#.NET通用权限管理系统组件数据字典 导  航 ◇ (01) BaseItemDetails ◇ (02) BaseItems ◇ (03) BaseLog ◇ (04) BaseMessage ...

  7. 通用权限管理系统Ver2.0

    通用权限管理系统Ver2.0平台采用kendo+mvc4+Nhibernate技术实现,底层采用自定义ORM实现数据库底层代码,支持Oracle.SqlServer.mysql等常用数据库,界面采用k ...

  8. 通用权限管理系统之权限菜单zTree树的展示及移动的处理方法

    在通用权限管理系统中,有很多数据结构是有父子关系的,如组织机构,部门,权限菜单等,在展示的时候,大多数是通过zTree树的形式展现的,如下: 权限菜单展示 这种数据后台输出比较容易处理,参考如下获取某 ...

  9. 基于Extjs 4.2的通用权限管理系统,通用后台模板,EF+MVC+Extjs 4.2

    基于Extjs 4.2的通用权限管理系统,通用后台. 我们的宗旨:珍爱生命,拒绝重复!Don't Repeat Yourself!!! 本案例采用EntityFramework+MVC4.0+Extj ...

随机推荐

  1. Java——观察者模式实例

    观察者模式(订阅/发布模式) 作者: 代码大湿 代码大湿 Java中观察者模式中主要是Observerable类(被观察者),和Observer接口(观察者).下面是个简单的demo //被观察者 p ...

  2. 【转】linux代码段,数据段,BSS段, 堆,栈

    转载自 http://blog.csdn.net/wudebao5220150/article/details/12947445  linux代码段,数据段,BSS段, 堆,栈 网上摘抄了一些,自己组 ...

  3. Web Service学习之一:Web Service原理

    一.定义 Web Service 不是框架也不是技术 而是解决远程调用.跨平台调用.跨语言调用问题的一种规范. 二.应用1.同一个公司新.旧系统的整合:比如CRM系统与OA.客服系统相互调用2.不同公 ...

  4. Java设计模式系列之策略模式

    策略模式的定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化. 策略模式使这些算法在客户端调用它们的时候能够互不影响地变化 ...

  5. 一些常用的IOS开发网站

    开发教程: 即便过了入门阶段,还是要经常看看一些不错的实例教程.1.http://mobile.tutsplus.com/category/tutorials/iphone/ 比较新的一个网站,以前没 ...

  6. C# 索引器 学习

    转载原地址: http://www.cnblogs.com/lxblog/p/3940261.html 1.索引器(Indexer): 索引器允许类或者结构的实例按照与数组相同的方式进行索引.索引器类 ...

  7. CodeForces 706B Interesting drink (二分查找)

    题意:给定 n 个数,然后有 m 个询问,每个询问一个数,问你小于等于这个数的数有多少个. 析:其实很简单么,先排序,然后十分查找,so easy. 代码如下: #pragma comment(lin ...

  8. Simulator模拟器 硬件键盘不能输入

    快捷键: Command + Shift +K

  9. mysql删除重复记录语句,删除除了 id 号不同,其他都相同的学生冗余信息

    /** 在Mysql下执行: delete from my.stu where id not in( select min(id) id from my.stu group by code) ; 用途 ...

  10. 一款多浏览器兼容的javascript多级下拉菜单

    这个多级下拉菜单的脚本大小不到2K,带有动画效果,可以方便地支持多个实例,并且能良好兼容WordPress系统wp_list_cats和wp_list_pages生成的多级列表.要初始化一个菜单,只需 ...