现在的位置: 首页 > 综合 > 正文

报表修改和共享Session

2013年07月05日 ⁄ 综合 ⁄ 共 2059字 ⁄ 字号 评论关闭
代码


http:
//www.cnblogs.com/gaoweipeng/archive/2009/10/02/1577351.html

Reprot Service 的报表经验
1 如果需要更换密码时, 要在报表后台Pager/Pager.aspx页面将管理员角色赋予新增的用户,同时在IIS中的Report Service中的权限选项也必须赋予新增用户
2 如果在找开报表时遇到没有认证的问题,  在“开始”-“SQL 配置”将数据库初始化选项中输入相应的数据库用户名和密码

在报表迁移时,需要增加的两张表 RolePopele, HelpCenter,还有记得在RolePopele中增加一个10000的行

调试时用的宿主文件。程序最终运行的时候没有这个,用于提供调试环境的,也可以不要这个。在工程的属性里去掉就可以了。 

ASP.NET在不同应用程序之间共享Session
最近在做一个多模块的大型项目,其中有些模块由其他公司承包,环境是.NET2.0。我的设计方案是每个模块是一个单独的应用程序,那么问题是如何将这些模块集中身份验证与授权过程呢?是个问题。。

我尝试将每个独立的Web应用程序放到统一的解决方案中,然后尝试编译,失败..

接着我想到了.NET环境下Session管理的3种方式——进内内、进程外、数据库

首先来看默认的InProc模式,Session被存储在IIS进程中,每个虚拟目录是隔离的,所以无法共享Session

然后是传说中的State Server, 虽然是独立的状态服务器(进程),但在内存中这些应用程序还是隔离的,我要想让他们实现共享,就需要修改内存?难度太大了..放弃

接下来是第三种方式,数据库服务器。由于对Session的全部操作都是由存储过程来实现的,而且存储过程未进行加密,所以我就设想通过修改存储过程的内部结构来达到共享的目的

用“aspnet_regsql.exe -127.0.0.1 --ssadd ”创建ASPState数据库和相应对象

然后我们看tempdb数据库中多了两个用户表,ASPStateTempSessions和ASPStateTempApplications

ASPStateTempApplications表中存储的是应用程序信息,每个应用程序在启动的时候在这里会注册一条记录,包括应用程序的ID(通过哈希算法生成的)和应用程序名称。这样思路就出来了,有多少个应用程序,在这个表里就对应多少条记录。那我们现在要做的是把这些记录变成一条记录,也就是要欺骗Framework,让它认为这些不同的应用程序是同一个应用程序.

于是我找到了TempGetAppID存储过程,这个存储过程是用于通过传递应用程序名称来得到应用程序ID信息的。根据我的推断,每个应用程序在调用这个过程时,这个过程会去AspStateTempApplications中检查是否有相应的记录,如果没有,就插入记录,然后返回相应的ID

这个存储过程原来的结构是这样的:
===========================
    ALTER PROCEDURE [dbo].[TempGetAppID]
    @appName    tAppName,
    @appId      int OUTPUT
    AS
    SET @appName 
= LOWER(@appName)
    SET @appId 
= NULL

    SELECT @appId = AppId
    FROM [tempdb].dbo.ASPStateTempApplications
    WHERE AppName 
= @appName
    ....
===========================

我们来把它改成:
===========================
    ALTER PROCEDURE [dbo].[TempGetAppID]
    @appName    tAppName,
    @appId      int OUTPUT
    AS
    SET @appName 
= LOWER(@appName)
    SET @appName 
= ‘/lm/w3svc/650056020/root/personnel/share’
    SET @appId 
= NULL

    SELECT @appId = AppId
    FROM [tempdb].dbo.ASPStateTempApplications
    WHERE AppName 
= @appName
===========================

我加了一句“SET @appName = /lm/w3svc/650056020/root/personnel/share”,也就是说,不管传递的是什么名字,我都把它变成统一的名字..然后F5一下就ok了,我的网站是www.91jn.com,欢迎各位交流!! 

 

抱歉!评论已关闭.