RemotingConfiguration.Configure (String, Boolean) 中隐藏的秘密

 

在进行Remoting开发过程中,一种流行的做法是将诸如对象激活方式,注册通道的类型,端口信息等写在配置文件中,然后使用RemotingConfiguration.Configure (String)方法读取这些信息并完成远程调用的配置。此时你会发现,.NET编译器提示该方法已经过期,推荐使用RemotingConfiguration.Configure (String, Boolean),这是.NET FrameWork2.0版中新增的方法。后者与前者的区别仅在于多了一个参数,完整的表示形式为:

public static void Configure ( string filename, bool ensureSecurity )

那么后面的这个ensureSecurity布尔型参数究竟有什么用呢。Msdn上给出的解释非常简单,如下:

ensureSecurity

如果启用安全性,则为 true;否则为 false

显然不满足安全性要求会抛出一个SecurityException异常来,但是如何启用安全性,处理针对谁的安全性都没有详细的说明。在Google上搜索了一下,发现大家还热衷于使用那个过时的版本,很少有用public static void Configure ( string filename, bool ensureSecurity )这种形式的,至于相关说明就更是少之又少。难道微软提出了这样一个新的方法只是在作秀吗?

不,其实这个方法中隐藏着许多秘密,要想知道更多的信息不妨让我们用反编译工具揭开它神秘的面纱,看看内部究竟做了些什么?下面是用.Net Reflecter工具看到的Configure ( string filename, bool ensureSecurity )内部实现代码:

[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.RemotingConfiguration)]
public static void Configure(string filename, bool ensureSecurity)
{
   
      RemotingConfigHandler.DoConfiguration(filename, ensureSecurity);
      RemotingServices.InternalSetRemoteActivationConfigured();
}

看来,Configure方法只是最外面的一层包装纸,真正进行远程配置的其实是里面的两个方法。跟踪到DoConfiguration()方法中去,如下:

internal static void DoConfiguration(string filename, bool ensureSecurity)
{
   
      RemotingConfigHandler.LoadMachineConfigIfNecessary();
      RemotingXmlConfigFileData data1 = RemotingConfigHandler.LoadConfigurationFromXmlFile(filename);
      if (data1 != null)
      {
   
            RemotingConfigHandler.ConfigureRemoting(data1, ensureSecurity);
      }
}

继续探查RemotingConfigHandlerConfigureRemoting方法作了什么,感觉离真相已经不远了。

private static void ConfigureRemoting(RemotingXmlConfigFileData configData, bool ensureSecurity)
{
   
      try
      {
   
            string text1 = configData.ApplicationName;
            if (text1 != null)
            {
   
                  RemotingConfigHandler.ApplicationName = text1;
            }
            if (configData.CustomErrors != null)
            {
   
                  RemotingConfigHandler._errorMode = configData.CustomErrors.Mode;
            }
            RemotingConfigHandler.ConfigureChannels(configData, ensureSecurity);
            if (configData.Lifetime != null)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值