项目概述:实现一个最简单的三层分布式应用程序。 Entity 实体层 (System.Serializable 可序列化) 1、BizL 业务逻辑层(继承System.EnterpriseServices.ServicedComponent COM+实现事务处理) IFacL 业务逻辑的接口层,实现客户端远程访问的接口协议 2、业务门面层(继承System.MarshalByRefObject实现IFacL.IStuMgeSerV) Remoting启动程序(SerV) 3、远程客户端测试(TerL)
项目IFacl中的业务接口定义,该定义描述了远程提供的服务内容是客户端与服务器交互 的协议,通过此协议客户端可以在没有服务器端完整的类结构的情况下仅通过接口就可以 调用服务器上的远程方法 namespace IFacL { public interface IStuMgeSerV { Entity.Student GetAStudent(); } } 项目Entity中的实体定义,Entity是服务器和客户端交互的对象,这个对象必须是 可序列化的并且客户端和服务器端必须同时具有相同的完整的类定义。 namespace Entity { [System.Serializable] public class Student { private string m_name=""; public Student(string name) { this.m_name=name; } public string Name { get{return this.m_name;} } } } 项目BizL的业务具体实现,这个具体实现只存在与服务器端,为了安全性和代码的版权 具体的实现对客户是透明的 namespace BizL { public class StudentMge :ServicedComponent { public Entity.Student FindAStudent() { Entity.Student aStu=new Entity.Student("Wengmingjun"); return aStu; } } }
项目Entity中的实体定义,Entity是服务器和客户端交互的对象,这个对象必须是 可序列化的并且客户端和服务器端必须同时具有相同的完整的类定义。
附: ====================================================================== COM+注册命令 path=D:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin ;C:\WINNT\Microsoft.NET\Framework\v1.1.4322 gacutil /u Entity.dll gacutil /u BizL.dll gacutil /i Entity.dll gacutil /i BizL.dll pause
AssemblyInfo的配置
using System.Reflection; using System.Runtime.CompilerServices; using System.EnterpriseServices;
[assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")]
[assembly: ApplicationActivation(ActivationOption.Server )] [assembly: ApplicationID("F0BA9BCE-133E-4cc2-9541-D72B236AC25B")] [assembly: ApplicationName("BizL")] [assembly: Description("BizL")] [assembly: ApplicationAccessControl(false )]
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("..\\..\\BizL.snk")] [assembly: AssemblyKeyName("")]
SNK文件的产生 sn -k BizL.snk
目录和文件结构 解决方案“L3Demo”(6个项目) -BizL -引用 .Entity .System .System.Data .System.EnteriseService .System.XML .AssemblyInfo.cs .BizL.snk .StudentMge.cs -Entity -引用 .System .System.Data .System.EnteriseService .System.XML .AssemblyInfo.cs .Entity.snk .Student.cs -FacL -引用 .BizL .Entity .IFacL .System .System.Data .System.EnteriseService .System.XML .StuMgeSerV.cs -IFacL -引用 .Entity .IStuMgeSerV.cs -SerV -引用 .FacL .System .System.Data .System.EnteriseService .System.XML .SerV.config .SerVstarter.cs -TerL -引用 .Entity .IFacL .System .System.Data .System.EnteriseService .System.XML .Client.config .TerL.cs