.NET Remoting

.NET Remoting 架構

.NET远程处理[1].NET Remoting )是微軟 .NET Framework 中的一種網路通訊技術,與 XML Web Service 不同的是,它可以使用 SOAP 以外的協定來通訊,而在伺服端和用戶端之間所操作的方法近乎相同,用戶端可以不必考慮使用的協定,即可存取伺服端所開放的物件。這個技術與是由Distributed COM所發展而來的,與DCOM最大的不同是,DCOM有限制使用 TCP Port,但.NET Remoting 可以選擇使用 TCP 或 HTTP 的方式通訊,而資料可以利用 SOAP 或二進位傳輸方式在網路上流動,二進位的傳輸效能是 SOAP 所不能比的,但 SOAP 卻可以得到和 Web Service 相互溝通的能力,因此 .NET Remoting 的設計彈性較大。

.NET Remoting 技術目前已整合到 Windows Communication Foundation 中。

原理

.NET Remoting 使用了 信道序列化 機制來串接兩台機器間的物件,信道是負責處理網路通訊的部份,而序列化則是處理物件與串流資料的處理工作。

  • 信道支援了 IPC(行程間通訊)、TCP 與 HTTP 通訊協定[2]
  • 序列化支援二進位(binary)或 XML(SOAP)通訊協定的資料串流[3]

當伺服端設定好使用的通道以及協定後,用戶端必須要跟隨伺服端的設定,並且依伺服端決定的活化模型來啟動,而程式設計的方法和一般呼叫元件般簡單。

public static void Main()
{
   RemotingConfiguration.Configure("Client.exe.config"); // 读取设置
   RemotableType remoteObject = new RemotableType(); // 创建可远程处理对象
   Console.WriteLine(remoteObject.SayHello()); // 调用远程方法
}

組態設定

.NET Remoting 的設計理念,就是為了要簡化網路上的物件通訊,而且要讓開發人員不必太過於在通訊的底層傷腦筋,因此在網路通訊協定上做了許多的包裝,並且允許在 Configuration File(app.config)中直接設定,或是由 .NET Remoting 的 Configuration API 來設定即可,故組態設定的選項複雜度較高,設計較複雜的 .NET Remoting 應用程式在組態的設定上往往會相當複雜。

以下為設定 .NET Remoting 用戶端的範例設定:

<configuration>
   <system.runtime.remoting>
      <application>
         <client>
            <wellknown 
               type="RemotableType, RemotableType"
               url="http://localhost:8989/RemotableType.rem"
            />
         </client>
      </application>
   </system.runtime.remoting>
</configuration>

活化模型

活化(Activation)是指用戶端啟動伺服端元件的方式,.NET Remoting 中支援了兩種方式[4]

  • Single-Call:在每一次用戶端呼叫時都生成一個執行個體。
  • Single-ton:在第一次呼叫時就生成執行個體,之後每一次呼叫都使用相同的執行個體。

物件傳遞

在 .NET Remoting 中,不論是傳值或傳址,每一個物件都必須要繼承 System.MarshalByRefObject 類別,才可以利用 .NET Remoting 來傳輸[5]

以下程式碼為伺服端的 Remoting 元件:

// RemotableType.cs
using System;
public class RemotableType : MarshalByRefObject // Remoting 物件必須繼承自 System.MarshalByRefObject 類別。
{
    public string SayHello()
    {
        Console.WriteLine("RemotableType.SayHello() was called!");
        return "Hello, world";
    }
}

參考資料

  1. ^ .NET 远程处理. [2013-01-03]. (原始内容存档于2013-05-11). 
  2. ^ Channels. [2008-09-30]. (原始内容存档于2016-04-02). 
  3. ^ Serialization Formatters. [2008-09-30]. (原始内容存档于2016-05-09). 
  4. ^ Activation of Remote Objects. [2008-09-30]. (原始内容存档于2008-10-18). 
  5. ^ Making Object Remotable. [2008-09-30]. (原始内容存档于2010-01-23). 
圖形介面
  • 桌面窗口管理器
  • DirectX
  • Direct2D
  • Direct3D
  • D3DX
  • GDI / GDI+
  • WPF
  • Silverlight
  • WinRT XAML英语Windows Runtime XAML Framework
  • Windows色彩系统
  • Windows Image Acquisition英语Windows Image Acquisition
  • Windows Imaging Component英语Windows Imaging Component
  • DXGI
  • Windows高级光栅化平台(WARP)
  • WinG标准
音樂與音效
多媒體
Web
資料存取
網路
通訊
  • 訊息API英语Messaging Application Programming Interface
  • 電話API
  • WCF
管理
元件與模型
函式庫
驱动程序
安全性
.NET
软件工廠
  • EFx Factory英语EFx Factory
  • Enterprise Library英语Microsoft Enterprise Library
  • 複合使用者介面英语Composite UI Application Block
  • CCF英语Microsoft Customer Care Framework
  • CSF英语Microsoft Connected Services Framework
行程間通訊
可協助性
  • Active Accessibility英语Microsoft Active Accessibility
  • 使用者介面自動化英语Microsoft UI Automation
文字與多語系支援
  • DirectWrite
  • 文本服务框架英语Text Services Framework
  • 文本对象模型英语Text Object Model
  • 输入法编辑器
  • 語言介面套件英语Language Interface Pack
  • 多語系使用者介面英语Multilingual User Interface
  • Uniscribe
遊戲開發
实现
架構
共同語言基礎架構
CLI支持語言
共同語言1
其他語言2
Core家族3
元件
比較
即將推出
  • "Acropolis"
  • "Jasper"
1微软在Visual Studio.NET Framework中提供了或者将提供支持的语言
2被多數使用者使用,且非教學或研究型的語言。
3具有跨平台(Windows, Mac OSX, Linux)能力的開發框架。