这个例子可以非常好地说明应用程序域的概念。在学习分布式程序设计时,首先要理解什么是应用程序域,.NET Remoting 就是利用运行库的服务在调用运行在不同的应用程序域中的对象的方法,并共享其数据。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
构造两个应用程序域:
1、新建一个控制台应用程序,项目名称为:RemotingTest,vs.net 2003 会在 RemotingTest 解决方案下生成一个 RemotingTest项目。这是我们的一个应用程序域。在这个应用程序内,显示该应用程序域的各种信息,然后,将调用AppDomain.CreateDomain()进入另一个应用程序域。
2、下面,我们来构建另一个应用程序域,该应用程序引用一个简单计算的类库 MathLibrary ,右键单击解决方案,添加——新建项目——类库,数据类库的名字为 MathLibrary,完成。将Class1改名为 SimpelMath,代码如下:
using System;
namespace MathLibrary
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class SimpleMath
{
public static int Add(int n1,int n2)
{
return n1 + n2;
}
public static int Subtract(int n1,int n2)
{
return n1 - n2;
}
}
}
选择“生成”菜单下面的生成 MathLibrary,完成了对类库的编译。右键单击解决方案,添加——新建项目——控制台应用程序,命名为 MathClient,代码如下:
using System;
using MathLibrary;
namespace MathClient
{
/// <summary>
/// MathClient 的摘要说明。
/// </summary>
public class MathClient
{
static void <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Main(string[] args)
{
Console.WriteLine();
AppDomain myDomain = AppDomain.CurrentDomain;
Console.WriteLine("Info about our current app domain");
Console.WriteLine("Hash Code = {0}",myDomain.GetHashCode());
Console.WriteLine("Friendly Name = {0}",myDomain.FriendlyName);
Console.WriteLine("App Base = {0}",myDomain.BaseDirectory);
Console.WriteLine();
Console.WriteLine(" 5 + 3 = {0} ",SimpleMath.Add(5,3));
Console.WriteLine(" 5 - 3 = {0} ",SimpleMath.Subtract(5,3));
Console.ReadLine();
}
}
}
注意:一定要添加对 MathLibrary 类库的引用,这样,一个使用类库的应用程序域就建立好了。
3、修改RemotingTest项目下的 Class1.cs 为 RemotingTest.cs,修改后代码如下:
using System;
namespace RemotingTest
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class RemotingTest
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
AppDomain myDomain = AppDomain.CurrentDomain;
Console.WriteLine("Info about our current app domain");
Console.WriteLine("Hash Code = {0}",myDomain.GetHashCode());
Console.WriteLine("Friendly Name = {0}",myDomain.FriendlyName);
Console.WriteLine("App Base = {0}",myDomain.BaseDirectory);
Console.WriteLine("Probing paths = {0}",myDomain.RelativeSearchPath);
AppDomain mathDomain = AppDomain.CreateDomain("MathClient");
mathDomain.ExecuteAssembly(@"E:\Csharp\MathClient\bin\Debug\MathClient.exe");
}
}
}
注意:一定要注意应用程序域的路径是正确的。