• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
一个具有上进心的码农
因为一篇文章中有很多是从很多篇文章中摘取的,请恕我没有一一说明摘取出处,如果没有说明,则该文章默认是摘取,如有侵犯您的权益,请与我联系,将会马上删除。
博客园    首页    新随笔    联系   管理    订阅  订阅

报表修改和共享Session

代码

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 
-S 127.0.0.1 -E -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,欢迎各位交流!! 

 

posted @ 2010-01-25 14:14  不若相忘于江湖  阅读(238)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3