客户端代码:引用组件
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请一定要告诉我哈