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

這是新版的效率:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM