zoukankan      html  css  js  c++  java
  • Spring.net Service 配置Remoting示例

    相关概念:

    SAO,CAO

    SingleTon(默认),SingleCall

    用Spring.net 配置发布Remoting,服务器对象不需要继承MarshByRefObject,而是一个原生的PONO(plain .net object)。spring.net在运行时创建一个proxy继承MarshByRefObject.

    服务器端配置示例
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>

      
    <configSections>
        
    <sectionGroup name="spring">
          
    <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
          
    <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
          
    <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core" />
        
    </sectionGroup>
      
    </configSections>

      
    <spring>

        
    <parsers>
          
    <parser type="Spring.Remoting.Config.RemotingNamespaceParser, Spring.Services" />
        
    </parsers>

        
    <context>
          
    <resource uri="config://spring/objects" />
          
    <!--<resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/cao.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/cao-aop.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleCall.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleCall-aop.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleton.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleton-aop.xml" />
    -->
        
    </context>

        
    <objects xmlns="http://www.springframework.net"
                         xmlns:r
    ="http://www.springframework.net/remoting">
          
    <description>Definitions of objects to be exported.</description>

          
    <r:configurer filename="TestSpringService.ServerApp.exe.config" />

          
    <!--singleton="false" 即为SAO的SingleCall,默认为Singleton-->
          
    <object id="singletonCalculator" type="TestSpringService.Common.Calculator, TestSpringService.Common"
                  singleton
    ="false"></object>

          
    <!--导出接口-->
          
    <r:saoExporter
              
    targetName="singletonCalculator"
              serviceName
    ="RemotedSaoSingletonCalculatorWucg" />
          
    <!--
            Old fashion way without remoting config parser...    
    -->
          
    <object name="saoSingletonCalculator" type="Spring.Remoting.SaoExporter, Spring.Services">
            
    <property name="TargetName" value="singletonCalculator" />
            
    <property name="ServiceName" value="RemotedSaoSingletonCalculatorWucgOld" />
          
    </object>
        
    </objects>

      
    </spring>

      
    <system.runtime.remoting>
        
    <application>
          
    <channels>
            
    <channel ref="tcp" port="8080" />
            
    <!--<channel ref="http" port="8080" />-->
          
    </channels>
        
    </application>
      
    </system.runtime.remoting>
    </configuration>

    Server端程序:

    static void Main(string[] args)
            {
                try
                {
                    // Force Spring to load configuration
                    ContextRegistry.GetContext();
                    Console.Out.WriteLine("Server listening...");
                }
                catch (Exception e)
                {
                    Console.Out.WriteLine(e);
                }
                finally
                {
                    Console.Out.WriteLine("--- Press <return> to quit ---");
                    Console.ReadLine();
                }
            }

    Client端配置
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>

      
    <configSections>
        
    <sectionGroup name="spring">
          
    <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
          
    <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
          
    <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core" />
        
    </sectionGroup>
      
    </configSections>

      
    <spring>

        
    <parsers>
          
    <parser type="Spring.Remoting.Config.RemotingNamespaceParser, Spring.Services" />
        
    </parsers>

        
    <context>
          
    <resource uri="config://spring/objects" />
          
    <!--<resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/cao.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/cao-aop.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleCall.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleCall-aop.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleton.xml" />
          <resource uri="assembly://Spring.Calculator.RemoteApp/Spring.Calculator.RemoteApp.Config/saoSingleton-aop.xml" />
    -->
        
    </context>

        
    <objects xmlns="http://www.springframework.net"
                         xmlns:r
    ="http://www.springframework.net/remoting">
          
    <description>配置服务</description>

          
    <!--注:serviceInterface一定为接口-->
          
    <r:saoFactory id="calculatorService"
                    serviceInterface
    ="TestSpringService.Common.ICalculator, TestSpringService.Common"
                    serviceUrl
    ="http://localhost:8080/RemotedSaoSingletonCalculatorWucg"/>

          
    <!--Old fashion way without remoting config parser...-->
          
    <object id="calculatorServiceOld" type="Spring.Remoting.SaoFactoryObject, Spring.Services">
            
    <property name="ServiceInterface" value="TestSpringService.Common.ICalculator, TestSpringService.Common" />
            
    <property name="ServiceUrl" value="tcp://localhost:8080/RemotedSaoSingletonCalculatorWucgOld" />
          
    </object>


        
    </objects>

      
    </spring>

    </configuration>

    Client程序:

     static void Main(string[] args)
            {
                IApplicationContext ctx = ContextRegistry.GetContext();

                Console.WriteLine("Get Calculator...");
                ICalculator firstCalc = (ICalculator)ctx.GetObject("calculatorServiceOld");


                Console.WriteLine("Divide(11, 2) : " + firstCalc.Divide(11, 2));

                Console.WriteLine("Divide(11, 2) : " + firstCalc.Add(11, 2));

                Console.WriteLine("Get Calculator...");
                ICalculator secondCalc = (ICalculator)ctx.GetObject("calculatorServiceOld");
                Console.WriteLine("Divide(20, 3) : " + secondCalc.Divide(20, 3));

                Console.ReadLine();

            }

    项目文件下载

    PS:

    CAO导出

    Server端CAO配置
          <object id="caoCalculator" type="TestSpringService.Common.Calculator, TestSpringService.Common"
          lazy-init
    ="true"  ></object>


          
    <!--CAO导出接口 old fashion-->
          
    <!--<object id="caoCalculatorOld" type="Spring.Remoting.CaoExporter, Spring.Services">
            <property name="TargetName" value="caoCalculator" />
            <property name="Infinite" value="false" />
            <property name="InitialLeaseTime" value="2m" />
            <property name="RenewOnCallTime" value="1m" />
          </object>
    -->

          
    <!--最新导出方式-->
          
    <r:caoExporter targetName="caoCalculator" infinite="false">
            
    <r:lifeTime initialLeaseTime="2m" renewOnCallTime="1m" />
          
    </r:caoExporter>
    Client端配置及调用
          <!--cao Services-->
          
    <object id="caoCalculatorServiceOld" type="Spring.Remoting.CaoFactoryObject, Spring.Services">
            
    <property name="RemoteTargetName" value="caoCalculator" />
            
    <property name="ServiceUrl" value="tcp://localhost:8080" />
          
    </object>

          
    <r:caoFactory id="caoCalculatorService"
    remoteTargetName
    ="caoCalculator"
    serviceUrl
    ="tcp://localhost:8080" />


    cs代码:
                ICalculator caoCalc = (ICalculator)ctx.GetObject("caoCalculatorServiceOld");
                Console.WriteLine("cao multiply:"+ caoCalc.Multiply(10, 20));


                ICalculator caoNewCalc = (ICalculator)ctx.GetObject("caoCalculatorService");
                Console.WriteLine("cao multiply:" + caoNewCalc.Add(10, 20));
                

     

    ILease.RenewOnCallTime Property
     

    Gets or sets the amount of time by which a call to the remote object renews the CurrentLeaseTime.

    Namespace:  System.Runtime.Remoting.Lifetime
    Assembly:  mscorlib (in mscorlib.dll)

     

    ILease Properties

    The ILease type exposes the following members.

    Properties

      Name Description
    Public property CurrentLeaseTime Gets the amount of time remaining on the lease.
    Public property CurrentState Gets the current LeaseState of the lease.
    Public property InitialLeaseTime Gets or sets the initial time for the lease.
    Public property RenewOnCallTime Gets or sets the amount of time by which a call to the remote object renews the CurrentLeaseTime.
    Public property SponsorshipTimeout Gets or sets the amount of time to wait for a sponsor to return with a lease renewal time.
    Top

  • 相关阅读:
    试验thrift做后端rpc,nginx做web服务器, python后端php前端
    DBSCAN算法
    用VAE(variational autoencoder)做sentence embedding/representation或者其他任何结构数据的热presentation
    关于rnn神经网络的loss函数的一些思考
    神经网络建模的一些感悟;
    embedding based logistic regression-神经网络逻辑回归tensorflow
    Farseer.net轻量级开源框架说明及链接索引
    什么是表达式树,它与表达式、委托有什么区别?(1)
    Farseer.net轻量级ORM开源框架 V1.x 教程目录
    Farseer.net轻量级ORM开源框架 V1.8版本升级消息
  • 原文地址:https://www.cnblogs.com/wucg/p/1806381.html
Copyright © 2011-2022 走看看