代码描述人生

.NET 相关技术 (大坏蛋的blog)

博客园 首页 新随笔 联系 订阅 管理
  28 Posts :: 4 Stories :: 63 Comments :: 2 Trackbacks

2004年9月10日 #


一个Assembly中所有的非公共类型,可以被它的【好友】Assembly访问。即如果AssemblyA中声明AssemblyB是它的好友Assembly,则AssemblyB可以像访问自身Assembly一样访问AssemblyA的私有类型。
将另一个Assembly声明成自己的Friend Assembly,需要使用一个InternalsVisibleToAttribute的特性。

[assembly:InternalsVisibleTo ("AssemblyB", PublicKeyToken="32ab4ba45e0a69a1")]

不过,声明Friend Assembly,代表允许AssemblyB访问自己的私有类型,但B不做逆向声明,A是不能访问B的私有类型的。跟现实生活一样。有的人你把他当朋友,什么秘密都告诉他,可人家没把你当朋友(开个玩笑,我身边没有)。
posted @ 2004-09-10 13:08 大坏蛋 阅读(1090) | 评论 (0)编辑

.NET FrameWoek2.0中,新添加一个IpcChannel,它是利用Windows的Ipc(进程间通讯)实现的一个Remoting的Channel,它的速度比Http或Tcp的Channel快很多,但它只能被用在本机不同应用程序域之间的通讯,所以,如果我们的客户端有可能与服务器端在同一个机器上运行时,可以通过注册IcpChannel来提高性能。
下面是一个简单的IpcChannel的示例:

Using directives

namespace TestIpcChannel
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            IpcChannel myChannel 
= new IpcChannel("test");
            ChannelServices.RegisterChannel(myChannel);
            RemotingConfiguration.RegisterWellKnownServiceType(
typeof(RemObject), "RemObject.rem", WellKnownObjectMode.SingleCall);
            
//服务注册结束,下面是客户端代码
            RemObject obj = (RemObject)(Activator.GetObject(typeof(RemObject), "Ipc://Test/RemObject.rem"));
            obj.TestMethod();
            Console.ReadLine();
        }

    }

    
public class RemObject : MarshalByRefObject
    
{
        
public void TestMethod()
        
{
            Console.WriteLine(
"Hello IcpChannel!");
        }

    }


}

为了便于大家读代码,该程序同时扮演服务器和客户端的角色,可以直接编译执行。
posted @ 2004-09-10 11:00 大坏蛋 阅读(3395) | 评论 (4)编辑