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

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

调用原理图:

web.configWCF配置参考

web.config 相关配置

  <system.serviceModel>
<client>
<endpoint address="http://192.168.1.199/PermissionService.asmx"
binding="basicHttpBinding" bindingConfiguration="PermissionServiceSoap"
contract="WebPermission.PermissionServiceSoap" name="PermissionServiceSoap">
</endpoint>
<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">
<identity>
<dns value="192.168.1.199" />
</identity>
</endpoint>
<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">
<identity>
<dns value="192.168.1.199" />
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="Internet">
</behavior>
</endpointBehaviors>
</behaviors>
<bindings> <basicHttpBinding>
<binding name="PermissionServiceSoap" />
<binding name="basicHttpBindingSmiple" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding> <netTcpBinding>
<binding name="netTcpBindingSmiple" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None">
<transport clientCredentialType="Windows" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding> </bindings> </system.serviceModel>

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

页面

        /// <summary>
/// 基本信息表表名
/// </summary>
protected string itemName = string.Empty;
/// <summary>
/// 输出的json内容
/// </summary>
protected string jsonStr = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "application/json";
itemName = string.IsNullOrWhiteSpace(RequestString("itemName")) || string.Equals(RequestString("itemName"), "null", StringComparison.OrdinalIgnoreCase) ? string.Empty : RequestString("itemName").Trim();
if (!string.IsNullOrWhiteSpace(itemName) && !string.IsNullOrWhiteSpace(itemName))
{
using (DataTable dt = ItemsManager.GetItemsDB(userInfo, "ItemsClass"))
{
//过滤 显示或不显示 DeletionStateCode为0的字段显示,Enabled为1的字段
BaseBusinessLogic.SetFilter(dt, BaseItemDetailsEntity.FieldDeletionStateCode, "0");
BaseBusinessLogic.SetFilter(dt, BaseItemDetailsEntity.FieldEnabled, "1");
DataTable dtNew = new DataTable();
dtNew.Columns.Add("key", typeof(string));
dtNew.Columns.Add("value", typeof(string));
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dtNew.NewRow();
row["key"] = dt.Rows[i]["ITEMNAME"];
row["value"] = dt.Rows[i]["ITEMVALUE"];
dtNew.Rows.Add(row);
}
jsonStr = DataTableHelper.DataTable2Json(dtNew);
}
}
else
{
jsonStr = "{\"list\":[{\"key\":\"出错了\",\"value\":\"取数据出错\",\"myFlag\":\"没有传入参数值\"}]}";
}
Response.Write(jsonStr);
Response.End();
}

 业务层

using System.Collections.Generic;
using System.Data;
using System.Web;
namespace TransferFees.BLL
{
using System;
using System.Web.Caching;
using DotNet.Business;
using DotNet.Utilities;
using TransferFees.DAL;
using TransferFees.Foundation;
/// <summary>
/// 获取基础信息表资料业务类
/// 以安全的WCF方式访问
/// 1,增加缓存功能
///
/// <author>
/// <name>songbiao</name>
/// <date>2014.03.18</date>
/// </author>
/// </summary>
/// </summary>
/// </summary>
public class ItemsManager
{
/// <summary>
/// 获得基础信息表资料
/// 通过安全的WCF服务方式调用
/// 传入的用户实体含有配置的加密信息
/// </summary>
/// <param name="userInfo">用户实体</param>
/// <param name="itemName">要查询的基础信息表的表名</param>
/// <returns></returns>
public static DataTable GetItemsDB(BaseUserInfo userInfo, string itemName, bool refreshFlag = false)
{
string key = "GetItemsDB";
if (refreshFlag)
{
HttpContext.Current.Cache.Remove(key);
}
if (HttpContext.Current.Cache[key] == null)
{
lock (userInfo)
{
if (HttpContext.Current.Cache[key] == null)
{
DataTable dtRes = ItemsServices.GetItemsDB(userInfo, itemName);
CacheItemRemovedCallback onRemoveCallback = new CacheItemRemovedCallback(CacheHelper.CacheItemRemovedCallback);
HttpContext.Current.Cache.Add(key, dtRes, null, DateTime.Now.AddMinutes(30.0), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemoveCallback);
}
}
}
return HttpContext.Current.Cache[key] as DataTable;
} /// <summary>
/// 获得基础信息表资料
/// 用户实体含有配置的加密信息
/// </summary>
/// <param name="userInfo">用户实体</param>
/// <param name="itemName">要查询的基础信息表的表名</param>
/// <returns></returns>
public static List<BaseItemDetailsEntity> GetItemsList(BaseUserInfo userInfo, string itemName, bool refreshFlag = false)
{
string key = "GetItemsList";
if (refreshFlag)
{
HttpContext.Current.Cache.Remove(key);
}
if (HttpContext.Current.Cache[key] == null)
{
lock (userInfo)
{
if (HttpContext.Current.Cache[key] == null)
{
List<BaseItemDetailsEntity> listRes = ItemsServices.GetItemsList(userInfo, itemName);
CacheItemRemovedCallback onRemoveCallback = new CacheItemRemovedCallback(CacheHelper.CacheItemRemovedCallback);
HttpContext.Current.Cache.Add(key, listRes, null, DateTime.Now.AddMinutes(30.0), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemoveCallback);
}
}
}
return HttpContext.Current.Cache[key] as List<BaseItemDetailsEntity>;
}
}
}

数据访问层

using System.Collections.Generic;
using System.Data;
using DotNet.Business;
using DotNet.Utilities; namespace TransferFees.DAL
{
/// <summary>
/// 获取基础信息表资料服务类
/// 以安全的WCF方式访问
///
/// <author>
/// <name>songbiao</name>
/// <date>2014.03.18</date>
/// </author>
/// </summary>
/// </summary>
/// </summary>
public class ItemsServices
{
/// <summary>
/// 获得基础信息表资料
/// 通过安全的WCF服务方式调用
/// 用户实体含有配置的加密信息
/// </summary>
/// <param name="userInfo">用户实体</param>
/// <param name="itemName">要查询的基础信息表的表名</param>
/// <returns></returns>
public static DataTable GetItemsDB(BaseUserInfo userInfo,string itemName)
{
DotNetService dotNetService = new DotNetService("DotNet.WCFClient");
return dotNetService.BaseItemDetailsService.GetDataTable(userInfo, itemName);
}
/// <summary>
/// 获得基础信息表资料
/// 用户实体含有配置的加密信息
/// </summary>
/// <param name="userInfo">用户实体</param>
/// <param name="itemName">要查询的基础信息表的表名</param>
/// <returns></returns>
public static List<BaseItemDetailsEntity> GetItemsList(BaseUserInfo userInfo, string itemName)
{
DotNetService dotNetService = new DotNetService("DotNet.WCFClient");
return dotNetService.BaseItemDetailsService.GetList(userInfo, "ItemsClass");
}
}
}

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

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

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

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

以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. GridView控件 Reapter控件 DataList控件 的区别和用法

    ASP.NET三大控件: 1.GridView控件:表格视图控件,可以用来绑定结果集或者视图,用起来比较方便和灵活,三个控件中使用最多的控件 用法--- this.gridview1.DataSour ...

  2. sublime text2 用ctags插件实现方法定位

    sublime text2 用ctags插件实现方法定位(转) 我们用sublime几乎都会首先安装这个插件,这个插件是管理插件的功能,先安装它,再安装其他插件就方便了. 点击sublime的菜单栏 ...

  3. 在线的JSON formate工具

    一个非常好的json formate工具 可以很容易发现json的错误,以及对json进行格式化 https://jsonformatter.curiousconcept.com/

  4. HDU 4462 Scaring the Birds (暴力求解,二进制法)

    题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵. 析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有 ...

  5. Cygwin解决Windows远程登录linux服务器

    下载地址http://www.cygwin.com/install.html 选择mirror.htnshost.com网站下载的比较快. 安装Cygwin(/X)需要选择的包: openssh(必选 ...

  6. phper 要求

    做了这么多年php,今天看到一个07年的老文,才发现自己的水平太菜.转过来激励下自己 说句实话,写这个真够无聊的.本来看了某位大虾的类似文章,腹诽了几句也就算了.但是昨天晚上有个客户拿着这篇文章问我: ...

  7. cocos2d-x Mask的实现及优化

    转自:http://blog.ch-wind.com/cocos2d-x%E4%B8%ADmask%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8F%8A%E4%BC%98%E5%8C ...

  8. java foreach编辑讲解

    foreach语句使用总结 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreac ...

  9. Javascript Design Patterns - Js Class

    JavaScript is a class-less language, however classes can be simulated using functions. eg: // A car ...

  10. osg通过glsl实现一个平面的水效果(法线贴图) 【转】

    转自 http://blog.sina.com.cn/s/blog_78ea87380101ehk3.html 此文实现一个简单的的水面效果,主要是法线贴图, 效果图如下:   此文分为三部分:ver ...