<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=.NET_Remoting</id>
	<title>.NET Remoting - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=.NET_Remoting"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=.NET_Remoting&amp;action=history"/>
	<updated>2026-06-26T13:31:30Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=.NET_Remoting&amp;diff=454597&amp;oldid=prev</id>
		<title>imported&gt;Sw777 来自 2022年10月15日 (六) 08:57</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=.NET_Remoting&amp;diff=454597&amp;oldid=prev"/>
		<updated>2022-10-15T08:57:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[File:DotNet_Remoting_Architecture.png|thumb|320px|.NET Remoting 架構]]&lt;br /&gt;
{{noteTA|G1=IT}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;.NET远程处理&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;{{Cite web |url= http://msdn.microsoft.com/zh-cn/library/72x4h507.aspx |title= .NET 远程处理 |accessdate= 2013-01-03 |archive-date= 2013-05-11 |archive-url= https://web.archive.org/web/20130511081831/http://msdn.microsoft.com/zh-cn/library/72x4h507.aspx |dead-url= no }}&amp;lt;/ref&amp;gt;（&amp;#039;&amp;#039;&amp;#039;.NET Remoting&amp;#039;&amp;#039;&amp;#039; ）是微軟 [[.NET Framework]] 中的一種網路通訊技術，與 XML Web Service 不同的是，它可以使用 SOAP 以外的協定來通訊，而在伺服端和用戶端之間所操作的方法近乎相同，用戶端可以不必考慮使用的協定，即可存取伺服端所開放的物件。這個技術與是由[[Distributed COM]]所發展而來的，與DCOM最大的不同是，DCOM有限制使用 TCP Port，但.NET Remoting 可以選擇使用 TCP 或 HTTP 的方式通訊，而資料可以利用 SOAP 或二進位傳輸方式在網路上流動，二進位的傳輸效能是 SOAP 所不能比的，但 SOAP 卻可以得到和 Web Service 相互溝通的能力，因此 .NET Remoting 的設計彈性較大。&lt;br /&gt;
&lt;br /&gt;
.NET Remoting 技術目前已整合到 [[Windows Communication Foundation]] 中。&lt;br /&gt;
&lt;br /&gt;
== 原理 ==&lt;br /&gt;
&lt;br /&gt;
.NET Remoting 使用了 &amp;#039;&amp;#039;&amp;#039;信道&amp;#039;&amp;#039;&amp;#039; 和 &amp;#039;&amp;#039;&amp;#039;序列化&amp;#039;&amp;#039;&amp;#039; 機制來串接兩台機器間的物件，信道是負責處理網路通訊的部份，而序列化則是處理物件與串流資料的處理工作。&lt;br /&gt;
&lt;br /&gt;
* 信道支援了 IPC（行程間通訊）、TCP 與 HTTP 通訊協定&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/bb552616.aspx |title=Channels |accessdate=2008-09-30 |archive-date=2016-04-02 |archive-url=https://web.archive.org/web/20160402211916/https://msdn.microsoft.com/en-us/library/bb552616.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
* 序列化支援二進位（binary）或 XML（SOAP）通訊協定的資料串流&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/bb552674.aspx |title=Serialization Formatters |accessdate=2008-09-30 |archive-date=2016-05-09 |archive-url=https://web.archive.org/web/20160509014604/https://msdn.microsoft.com/en-us/library/bb552674.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
當伺服端設定好使用的通道以及協定後，用戶端必須要跟隨伺服端的設定，並且依伺服端決定的活化模型來啟動，而程式設計的方法和一般呼叫元件般簡單。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static void Main()&lt;br /&gt;
{&lt;br /&gt;
   RemotingConfiguration.Configure(&amp;quot;Client.exe.config&amp;quot;); // 读取设置&lt;br /&gt;
   RemotableType remoteObject = new RemotableType(); // 创建可远程处理对象&lt;br /&gt;
   Console.WriteLine(remoteObject.SayHello()); // 调用远程方法&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 組態設定 ==&lt;br /&gt;
&lt;br /&gt;
.NET Remoting 的設計理念，就是為了要簡化網路上的物件通訊，而且要讓開發人員不必太過於在通訊的底層傷腦筋，因此在網路通訊協定上做了許多的包裝，並且允許在 Configuration File（app.config）中直接設定，或是由 .NET Remoting 的 Configuration API 來設定即可，故組態設定的選項複雜度較高，設計較複雜的 .NET Remoting 應用程式在組態的設定上往往會相當複雜。&lt;br /&gt;
&lt;br /&gt;
以下為設定 .NET Remoting 用戶端的範例設定：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;configuration&amp;gt;&lt;br /&gt;
   &amp;lt;system.runtime.remoting&amp;gt;&lt;br /&gt;
      &amp;lt;application&amp;gt;&lt;br /&gt;
         &amp;lt;client&amp;gt;&lt;br /&gt;
            &amp;lt;wellknown &lt;br /&gt;
               type=&amp;quot;RemotableType, RemotableType&amp;quot;&lt;br /&gt;
               url=&amp;quot;http://localhost:8989/RemotableType.rem&amp;quot;&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
         &amp;lt;/client&amp;gt;&lt;br /&gt;
      &amp;lt;/application&amp;gt;&lt;br /&gt;
   &amp;lt;/system.runtime.remoting&amp;gt;&lt;br /&gt;
&amp;lt;/configuration&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 活化模型 ==&lt;br /&gt;
&lt;br /&gt;
活化（Activation）是指用戶端啟動伺服端元件的方式，.NET Remoting 中支援了兩種方式&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/bb552668.aspx |title=Activation of Remote Objects |accessdate=2008-09-30 |archive-date=2008-10-18 |archive-url=https://web.archive.org/web/20081018095708/http://msdn.microsoft.com/en-us/library/bb552668.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Single-Call&amp;#039;&amp;#039;&amp;#039;：在每一次用戶端呼叫時都生成一個執行個體。 &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Single-ton&amp;#039;&amp;#039;&amp;#039;：在第一次呼叫時就生成執行個體，之後每一次呼叫都使用相同的執行個體。&lt;br /&gt;
&lt;br /&gt;
== 物件傳遞 ==&lt;br /&gt;
&lt;br /&gt;
在 .NET Remoting 中，不論是傳值或傳址，每一個物件都必須要繼承 &amp;#039;&amp;#039;&amp;#039;System.MarshalByRefObject&amp;#039;&amp;#039;&amp;#039; 類別，才可以利用 .NET Remoting 來傳輸&amp;lt;ref&amp;gt;{{Cite web |url=http://msdn.microsoft.com/en-us/library/h8f0y3fc.aspx |title=Making Object Remotable |accessdate=2008-09-30 |archive-date=2010-01-23 |archive-url=https://web.archive.org/web/20100123042850/http://msdn.microsoft.com/en-us/library/h8f0y3fc.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
以下程式碼為伺服端的 Remoting 元件：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// RemotableType.cs&lt;br /&gt;
using System;&lt;br /&gt;
public class RemotableType : MarshalByRefObject // Remoting 物件必須繼承自 System.MarshalByRefObject 類別。&lt;br /&gt;
{&lt;br /&gt;
    public string SayHello()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;RemotableType.SayHello() was called!&amp;quot;);&lt;br /&gt;
        return &amp;quot;Hello, world&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;references-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Microsoft APIs}}&lt;br /&gt;
{{DotNET}}&lt;br /&gt;
&lt;br /&gt;
[[Category:.NET]]&lt;br /&gt;
[[Category:进程间通信]]&lt;br /&gt;
[[Category:物件請求仲介]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Sw777</name></author>
	</entry>
</feed>