<p><b>.NET遠端處理</b>（<b>.NET Remoting</b> ）是微軟 .NET Framework 中的一種網路通訊技術，與 XML Web Service 不同的是，它可以使用 SOAP 以外的協定來通訊，而在伺服端和使用者端之間所操作的方法近乎相同，使用者端可以不必考慮使用的協定，即可存取伺服端所開放的物件。這個技術與是由Distributed COM所發展而來的，與DCOM最大的不同是，DCOM有限制使用 TCP Port，但.NET Remoting 可以選擇使用 TCP 或 HTTP 的方式通訊，而資料可以利用 SOAP 或二進位傳輸方式在網路上流動，二進位的傳輸效能是 SOAP 所不能比的，但 SOAP 卻可以得到和 Web Service 相互溝通的能力，因此 .NET Remoting 的設計彈性較大。
</p><p>.NET Remoting 技術目前已整合到 Windows Communication Foundation 中。
</p>


<h2><span id=".E5.8E.9F.E7.90.86"></span><span id="原理">原理</span></h2>
<p>.NET Remoting 使用了 <b>信道</b> 和 <b>序列化</b> 機制來串接兩台機器間的物件，信道是負責處理網路通訊的部份，而序列化則是處理物件與串流資料的處理工作。
</p>
<ul><li>信道支援了 IPC（行程間通訊）、TCP 與 HTTP 通訊協定。</li>
<li>序列化支援二進位（binary）或 XML（SOAP）通訊協定的資料串流。</li></ul><p>當伺服端設定好使用的通道以及協定後，使用者端必須要跟隨伺服端的設定，並且依伺服端決定的活化模型來啟動，而程式設計的方法和一般呼叫元件般簡單。
</p>

<h2><span id=".E7.B5.84.E6.85.8B.E8.A8.AD.E5.AE.9A"></span><span id="組態設定">組態設定</span></h2>
<p>.NET Remoting 的設計理念，就是為了要簡化網路上的物件通訊，而且要讓開發人員不必太過於在通訊的底層傷腦筋，因此在網路通訊協定上做了許多的包裝，並且允許在 Configuration File（app.config）中直接設定，或是由 .NET Remoting 的 Configuration API 來設定即可，故組態設定的選項複雜度較高，設計較複雜的 .NET Remoting 應用程式在組態的設定上往往會相當複雜。
</p><p>以下為設定 .NET Remoting 使用者端的範例設定：
</p>

<h2><span id=".E6.B4.BB.E5.8C.96.E6.A8.A1.E5.9E.8B"></span><span id="活化模型">活化模型</span></h2>
<p>活化（Activation）是指使用者端啟動伺服端元件的方式，.NET Remoting 中支援了兩種方式：
</p>
<ul><li><b>Single-Call</b>：在每一次使用者端呼叫時都生成一個執行個體。</li>
<li><b>Single-ton</b>：在第一次呼叫時就生成執行個體，之後每一次呼叫都使用相同的執行個體。</li></ul><h2><span id=".E7.89.A9.E4.BB.B6.E5.82.B3.E9.81.9E"></span><span id="物件傳遞">物件傳遞</span></h2>
<p>在 .NET Remoting 中，不論是傳值或傳址，每一個物件都必須要繼承 <b>System.MarshalByRefObject</b> 類別，才可以利用 .NET Remoting 來傳輸。
</p><p>以下程式碼為伺服端的 Remoting 元件：
</p>

<h2><span id=".E5.8F.83.E8.80.83.E8.B3.87.E6.96.99"></span><span id="參考資料">參考資料</span></h2>

<!-- 
NewPP limit report
Parsed by mw2358
Cached time: 20230505225901
Cache expiry: 1814400
Reduced expiry: false
Complications: [show‐toc]
CPU time usage: 0.340 seconds
Real time usage: 0.772 seconds
Preprocessor visited node count: 2224/1000000
Post‐expand include size: 327589/2097152 bytes
Template argument size: 2514/2097152 bytes
Highest expansion depth: 10/100
Expensive parser function count: 34/500
Unstrip recursion depth: 0/20
Unstrip post‐expand size: 9054/5000000 bytes
Lua time usage: 0.114/10.000 seconds
Lua memory usage: 7537144/52428800 bytes
Number of Wikibase entities loaded: 0/400
--><!--
Transclusion expansion time report (%,ms,calls,template)
100.00%  527.395      1 -total
 20.13%  106.150      2 Template:Navbox
 17.48%   92.180      1 Template:Microsoft_APIs
 13.70%   72.259     31 Template:Tsl
 10.43%   55.021      1 Template:NoteTA
  9.44%   49.783      5 Template:Cite_web
  3.99%   21.030      1 Template:DotNET
  2.42%   12.764      1 Template:Navbox_subgroups
  0.24%    1.291      7 Template:Smallsup
-->
**.NET 遠端處理**（**.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 通訊協定。
* 序列化支援二進位（binary）或 XML（SOAP）通訊協定的資料串流。

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

## 組態設定

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

以下為設定 .NET Remoting 使用者端的範例設定：

## 活化模型

活化（Activation）是指使用者端啟動伺服端元件的方式，.NET Remoting 中支援了兩種方式：

* **Single-Call**：在每一次使用者端呼叫時都生成一個執行個體。
* **Single-ton**：在第一次呼叫時就生成執行個體，之後每一次呼叫都使用相同的執行個體。

## 物件傳遞

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

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

## 參考資料
.NET_Remoting