zoukankan      html  css  js  c++  java
  • Sofire v1.0 开源——WinForm/SL/WebForm 的 Remoting(1)

    Sofire Suite 是一套个人从 2009 年 08 月开始着手研发的套件。历经几年的不断优化改进,从最初的 V 套件到 Sofire2011 到目前的 Sofire.v1.0,Sofire 已经经历了许多项目的考验,并且出色的完成它的使命。现在,我将这套组件再次重构,尝试让它成为任意平台、框架、套件的的底层首选。秉着开源精神,希望这套组件在博友的讨论中不断成长、成熟。

    那么,Sofire.v1.0包含什么内容?

    1、数据库访问(Sofire.Data)

    2、快速动态反射(Sofire.Dynamic)

    3、高效简短的二进制序列化(Sofire.Serialization.BinarySuite)

    4、远程对象模式(Sofire.DataComm.Remote)

    5、安全高效Socket(Sofire.DataComm.Net)

    6、面向切面(Sofire.AOP)

    7、等。由于Sofire v1.0 第一期移植,故而功能暂时尚未全部移植完成。

    为了吸引博友的眼球,我特意做出一个十分简单基于 Silverlight 的 Remoting 示例。以这个例子,做首个开源组件的原因,其实主要是想感谢博友hpze2000的大力支持和关注,上一篇关于 VRemoting 的相关文章(点此访问)已经是2011-10-25的事情了。但博友hpze2000一直关注此个示例品,不得不说,由于工作上的变动,导致这个东西整整大半年以后才再次发布上来,对此我表示非常的抱歉,也希望接下来所演示的示例和开源框架,能让各位博友满意。
    先来看看结果吧:
    服务端启动画面

    服务端启动画面

    客户端执行界面

    客户端执行界面

    服务端响应界面

    服务端响应界面

    示例解析

    整个示例非常简单,但却包含了主要四大模块:SocketRemoting动态反射序列化

    Remote契约(好吧,我偷懒了)
    namespace RemotingInterfaces
    {
        public interface ITest
        {
            double Add(double x, double y);
        }
    }
    
    契约实现(好吧,我真的偷懒了)
    using RemotingInterfaces;
    
    namespace SofireDemo1.Test
    {
        public class Tester : ITest
        {
            #region ITest 成员
    
            public double Add(double x, double y)
            {
                return x + y;
            }
    
            #endregion
        }
    }
    
    配置文件(DefaultSetting.xml)
    <?xml version="1.0" encoding="utf-8" ?>
    <Application Name="服务端"
                 ReturnsError="True">
      <!-- tcp://localhost:8001/One/HelloService.v -->
      <Host Name="One"
            ReturnsError="True"
            Port="8081">
        <Service  Name="HelloService"
                  ReturnsError="True"
                  InstanceMode="Default"
                  Contract="RemotingInterfaces.ITest, RemotingInterfaces"
                  Type="SofireDemo1.Test.Tester, SofireDemo1"/>
      </Host>
      <!-- tcp://localhost:8001/Tow/HelloService.v -->
      <Host Name="Tow"
            ReturnsError="True"
            Port="8082">
        <Service  Name="HelloService"
                  ReturnsError="True"
                  InstanceMode="Default"
                  Contract="RemotingInterfaces.ITest, RemotingInterfaces"
                  Type="SofireDemo1.Test.Tester, SofireDemo1"/>
      </Host>
    </Application>
    
    服务端源码
            public static Result Start()
            {
                RemotingApplication.Initialization("DefaultSetting.xml");
                RemotingApplication.ApplicationStateChanged += new CommunicationStateEventHandler(RemotingApplication_ApplicationStateChanged);
                RemotingApplication.ServerStateChanged += new CommunicationStateEventHandler(RemotingApplication_ServerStateChanged);
                RemotingApplication.ClientJoined += new EventHandler(RemotingApplication_ClientJoined);
                RemotingApplication.ClientQuitted += new EventHandler(RemotingApplication_ClientQuitted);
                RemotingApplication.ClientInvoking += new EventHandler(RemotingApplication_ClientInvoking);
                RemotingApplication.ClientInvoked += new ClientInvokedEventHandler(RemotingApplication_ClientInvoked);
                RemotingApplication.ClientFailed += new ClientFailedEventHandler(RemotingApplication_ClientFailed);
                return RemotingApplication.Open();
            }
    
    客户端源码
            public MainPage()
            {
                InitializeComponent();
                ProxyFactory.Register("Test", "tcp://localhost:8081/One/HelloService.v", "testSL", "123456");
            }
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                var i = ProxyFactory.Create();
                MessageBox.Show(i.Add(double.Parse(textBox1.Text), double.Parse(textBox2.Text)).ToString());
                ProxyFactory.Destroy(i);
            }
    
    结束语

    可以看得出来,这个示例十分简单易用。它实用任何 .NET 的开发方式,无论是你 WinForm 还是 WebForm 开发,Sofire 将会最大程度的减少你的开发周期!

    如果博友支持力度足够,考虑将其发布到开源网站进行分享(点击以下图片进行下载源码)。

    Sofire.v1.0

    Sofire.SL.v1.0

    为什么开源?

    闭锁式开发是一种十分令人头痛的方式。从个人长远的利益来说,想要这一套组件更加优秀,就需要无数的朋友共同努力。任何一套开发套件,没有经历洗礼和应用,是无法体现其深在的价值,更无法令其更进一层。

    开源,不是为了别人,是为了自己。如果您支持这套组件,请不要吝啬您的推荐。

    关于序列化的效率

    旧版的效率(参考http://www.cnblogs.com/sofire/archive/2011/04/06/2000277.html

    这是新版的效率:

  • 相关阅读:
    VLAN应用实例
    eNSP 简介及基础操作
    管道符、重定向
    使用Bind提供域名解析服务-DNS
    Samba服务
    虚拟网站主机功能
    springboot接受表单400错误
    Java方法遍历一次数组返回两个结果(最大值与最小值)
    Java异常总结
    Java内部类
  • 原文地址:https://www.cnblogs.com/sofire/p/2498101.html
Copyright © 2011-2022 走看看