Spring.NET学习笔记20——整合Remoting(应用篇) Level 200

  Spring.Services命名空间的目的是为业务服务提供位置的透明性。我们相信使用普通的接口和.NET类,用户应该可以用最简单的方式实现服务。我们也认为在将某个服务发布给客户端的时,应该只关心服务的配置,而无需关心服务的实现。在Spring.Services命名空间的支持下,可以用IoC容器中的服务导出对象将任一个普通对象发布为web服务、企业服务组件或远程对象。这里说的“普通对象”是指不继承或应用基础框架中任何特殊的基类(如MarshalByRefObject)或特性(如WebMethod)的对象。目前Spring.NET要求要发布的对象必须实现一个业务接口(按:即要发布的类必须实现某个接口,但这并非是限制,毕竟面向接口无论在什么时候都是好的编程实践)。Spring.NETRemoting导出类会自动为其创建一个继承自MarshalByRefObject代理类。在服务端,可以将SAO类型注册为SingleCallSingleton模式,也可以为每个对象配置生存期和租赁时间。另外,还可以将应用了AOP通知的对象发布为SAO。在客户端,可以用面向接口的最佳编程方式获取CAO的代理对象。Spring.NET还为Remoting创建了专门的schema来简化xml配置,不过我们仍然可以使用标准的schema来创建对象定义。

  传统方式,在服务器需要使用RemotingConfiguration.Configure("xxx.exe.config")的方式启动服务,在客户端需要IContract contract = (IContract) Activator.GetObject ( typeof (IContract ), "tcp://localhost:1800/xxxx")的方式来注册服务。现在,一切都由Spring.NET而随之改变。

 

  准备条件:  

    [Serializable]
    
public class Person
    {
        
public string Name { getset; }
        
public int Age { getset; }
    }

 

    public interface IPersonContract
    {
        
void SavePerson(Person model);

        Person GetPerson();
    }

 

 

PersonContract

 

 

  一、部署为Singleton模式:

   服务端

 

App.config

 

Program

 

  

  客户端

App.config

 

Program

 

  运行效果:

 

  第一次调用

 

  第二次调用

 

  二、部署为SingleCall模式:

  修改对象的属性

<object id="personContract" type="RemotingServer.PersonContract, RemotingServer" singleton="false"/>

  

Program

 

 

  调用

 

  代码下载

 

 

  返回目录

posted @ 2009-11-19 14:30  冬子哥  阅读(8450)  评论(13编辑  收藏  举报