COM+组件安全....

客户端代码:引用组件

using System;
using System.EnterpriseServices;
using RoleCom;

namespace RoleClient
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   try
   {
    
    RoleCom.chkCls obj=new RoleCom.chkCls();

    //获取基于角色的安全性在当前上下文中是否处于活动状态
    Console.WriteLine(obj.whatisUser());

    //根据当前调用方的角色提供服务
    if(obj.isUserInManagerRole())
    {   
     Console.WriteLine ("这是Manager角色");
     Console.WriteLine(obj.test());
    }
    else
    {
     Console.WriteLine ("非安全授权角色,不能使用组件");
    }
    Console.ReadLine();
   }
   catch(Exception e)
   {
    //为授权的用户不能创建组件对象
    Console.WriteLine ("用户无授权,拒绝访问!!");
    Console.ReadLine ();
   }
  }
 }
}

组件端:

using System;
using System.EnterpriseServices;

[assembly:ApplicationName("rolecom")]
[assembly:ApplicationActivation(ActivationOption.Server)]
//允许装有该应用程序的库或服务器应用程序的安全配置。
//在用regsvcs注册是不会再有警告。
[assembly: ApplicationAccessControl]

//可以手动注册组件:regsvcs,也可以客户端运行激活
//最好手动注册,然后添加用户到角色
namespace RoleCom
{
 /// <summary>
 /// chkCls 的摘要说明。
 /// </summary>
 ///
 //在对组件的调用上启用安全检查
 [ComponentAccessControl(true)]
 //为组件配置安全角色,第二参数标志不是所有用户都能访问该组件。
    [SecurityRole("ManagerRole",false)]

 public class chkCls:System.EnterpriseServices.ServicedComponent
 {
  public chkCls()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  public string test()
  {
   return "组件服务。。。";
  }

  public bool isUserInManagerRole()
  {
   //确定调用方是否属于指定角色
   return ContextUtil.IsCallerInRole("ManagerRole");
  }

  public string whatisUser()
  {
   //获取基于角色的安全性在当前上下文中是否处于活动状态
   if(ContextUtil.IsSecurityEnabled)
   {
    return "caller Known";
   }
   else
   {
    return "UnKnown";
   }
  }
 }
}

 本程序主要是管理COM+组件的安全性.存在的问题是给使用该组件设置两个不同的用户,一个是系统的管理员.一个非管理员.按理来说应该在客户端出现的结果是:

//根据当前调用方的角色提供服务
    if(obj.isUserInManagerRole())
    {   
     Console.WriteLine ("这是Manager角色");
     Console.WriteLine(obj.test());
    }
    else
    {
     Console.WriteLine ("非安全授权角色,不能使用组件");
    }
但是我电脑所出现的结果只有这两种: if(obj.isUserInManagerRole())
    {   
     Console.WriteLine ("这是Manager角色");
     Console.WriteLine(obj.test());
    }
和异常catch(Exception e)
   {
    //为授权的用户不能创建组件对象
    Console.WriteLine ("用户无授权,拒绝访问!!");
    Console.ReadLine ();
   }
至今未找到答案.想请大家帮帮忙解决啊...如过运行到了ELSE请一定要告诉我哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值