在asp里面,session对象可以用来保存一个com对象,然后通过session对想来调用这个com对象的方法,但是c#并不支持后期绑定,请问有什么办法可解决这个问题?

解决方案 »

  1.   


    yourcom c1 = ...
    Session["com"] = c1;
    ....
    other:try{
    yourcom c2 = (yourcom)Sessin["com"];
    c2.method();
    }
      

  2.   

    session就是个容器,什么都能放,放的时候装箱,取的时候拆箱(强制转换)就好了。
      

  3.   

    我觉得还是用反射比较好。
    用Session是不是不安全啊?
      

  4.   

    Session对象【知识点回顾】
    1、 变量的实质:是一个存储单元在内存空间中的一个符号化的地址。
    2、 变量的作用域:是指定变量的有效范围。
    分为:
    过程级变量:作用域仅局限于该过程或函数内部。
    脚本级变量:作用域为当前的整个ASP页面。
    【引入】
    从这里我们可以看出,变量的作用域最大也仅是当前页面范围。这给页面与页面之间的数据传递和记录会话状态造成一定的困难。为此,ASP提供了Session和Application对象以及ASP的工程文件global.asa。
    ASP允许开发者利用会话这一工具从一个页面到另一个页面跟踪用户。当用户打开一个建立会话的ASP网页时,会话被建立,用户在该站点从一个页面浏览到另一个页面时,会话将会继续,直到该用户长时间不访问该站点或关闭该站点的所有窗口,或者打开了一个终止会话的ASP网页。
    【新课】
    1、 创建Session对象
    我们可以利用Session对象存储普通变量或对象变量,创建出具有Session级作用域的变量。Session对象创建的变量我们可以用于存储和记录用户信息。
    创建方法:Session(“变量名”)
    说明:
    创建之后,就可将Session(”变量名”)作为一个整体,按照普通变量的用法来使用。
    例:若要创建一个Session级的变量passflg,并且给该变量赋初值为0。
        <% Session(“passflg”)=0 %>
    2、 Session对象的属性
    1)、SessionID:
    返回当前会话的会话标识符。它是由服务器在生成会话时,通过复杂算法产生的一组数值,它惟一地标识了每个用户的会话。
    例:输出当前会话的标识符
        <%=Session.SessionID%>
    2)、TimeOut:
            以分钟为单位定义Session会话超时的时间期限。
            会话超时的时限可在IIS服务器中设置,其默认值为20分钟。也可在页面中利用该属性来设置。
        例:若设置会话超时的时间为5分钟。
           <% Session.TimeOut=5 %>
             说明:
    在设置TimeOut属性时,可根据具体需要确定数值。如果该值太小,超时会过于频繁的发生,如果该值太大,可能会消耗过多的服务器资源。
    3、 Session对象的方法
    Abandon方法:结束当前会话
       用法:
             <% Session.Abandon %>
    说明:
    Abandon方法用于主动结束会话,若没有调用该方法,当会话超时后,也会自动结束当前会话。
    4、 Session对象的集合
    Contents集合:包含一个会话建立的所有变量。
    Contents集合用来确定某一个会话变量的值,或者用一个循环来检索所有会话变量的值。
    语法:
    Session.Contents(“变量名”)或者Session(“变量名”)
    Session对象使用实例:
    course.asp页面需要授权访问,在访问该页面之前,要求输入用户名和密码,并进行校验,若密码正确,则允许访问,若不正确,则输出相应的提示信息。在course.asp页面中,为防止用户直接访问,要求对访问用户是否授权进行判断,若未授权,则返回到密码校验页面。
    分析:可单独设计一密码校验页面,如checkuser.htm,用以接收用户名和密码,若密码正确,则引导到course.asp页面,并设置授权标志变量为1,在course.asp页面中,通过判断授权标志变量是否为1,来决定是否允许访问。
    而由上课开始的知识回顾里我们知道,脚本级变量的作用域仅限于当前页面,而此处授权标志变量需要跨页面传递数据,因此,我们需要用Session对象创建一个具有Session作用域的变量。流程图:                                        验证失败,返回登陆页面
                             验证成功
    实现代码:
    checkuser.htm
    <html>
    <head><title>用户校验</title></head>
    <body>
    <form name=”checkuser” method=”post” action=”check.asp”>
    用户名:<input type=”text” name=”username”><br>
    密码:<input type=”password” name=”password”><br><br>
    <input type=”submit” value=”确定”><input type=”reset” value=”取消”>
    </form>
    </body>
    </html>
    check.asp
    <%
    dim user,pass
    user=Request.Form(“username”)  ‘从表单中获得名称为username界面对象的值
    pass=Request.Form(“password”)  ‘从表单中获得名称为password界面对象的值
    If pass=”okpass” and user=”okuser” Then
    Session(“passflg”)=1              ‘设置授权标志
    Response.Redirect “course.asp”      ‘跳转到course.asp页面
    Else
    Session(“passflg”)=0               ‘设置未授权标志
    Response.write “密码错误!<br><a href=’checkuser.htm’>返回</a>”
    End if
    %>course.asp
    开始处放入以下代码:
    <% If Session(“passflg”)=0 Then Response.Redirect “checkuser.htm” %>
        ‘检测用户是否被授权,如果已授权,则显示页面,如果未授权,则跳转到登录页面checkuser.htm
    【实例指导】
      

  5.   

    用什么反射,首先session里放什么东西都这个系统设计者最初设计好的,每个页面都要遵循这一设计。如果说你在某个页面里偷偷放什么东西进去,别的程序员怎么知道?Session里放什么东西一定要设计时定下来。所有开发者都要清楚里面有什么,应该放什么。这样才不会乱。
      

  6.   

    是不是反射技术能够取代Session
    ~~~~好像是这么说的吧!
      

  7.   

    把session變量強制轉換成你要的那個類的對象後,然後再打個點兒應該就能出來了。如果不能出來的話,就賦給一個該類的對象,然後再打個點兒什麽一系列的應該都能出來那個方法名兒了吧!哈哈非常之easy也,哈
      

  8.   


    在asp里面,session对象可以用来保存一个com对象,然后通过session对想来调用这个com对象的方法,但是c#并不支持后期绑定,请问有什么办法可解决这个问题?
    ----------------------------------------------------------------------今天刚做了一个这个东西, 把一棵树放到session里了。你直接操作session里的对象是不行的,可以考虑 把session里的对象 强制类型转换后  在复制出一份备份来用。错误代码:
    treeview tvTemp=(treeview)session["tv1"];
    这里的tvTemp指向session里的对象,不可以直接操作和显示,不过你可以这样。正确代码:
    //提取session中保存的树
    TreeView tvTemp=(Microsoft.Web.UI.WebControls.TreeView)Session["treeV"];
    //清除地市树上的节点集合
    this.treeV.Nodes.Clear();
    TreeNode tnTemp=(TreeNode)tvTemp.Nodes[0].Clone();  //附值一个复制对象,这样就能显示和操作了
    this.treeV.Nodes.Add(tnTemp);
      

  9.   

    哦,不好意思,看错了,我用的是.net
      

  10.   

    我晕!
    fangxinggood(我的老婆是困困) 
    差点看错了!
      

  11.   

    Session的存储还是要考虚到性能问题,别过多的使用,会占用大量的服务器内存!