C#中的遠程執行和分散式運算

來源:互聯網
上載者:User

摘要

遠程執行是C#中一種使開發人員能夠使用遠程對象的基礎架構。遠程對象是一種位於調用者應用域之外的對象。本文中的例子說明了如何使用二種遠程對象訪問機制(值傳遞和地址傳遞),它還通過一個簡單的、功能強大的任務伺服器的實現說明了分散式運算中遠程對象的強大功能。

任務伺服器能夠接受所有能實現ITask介面的對象,並在其應用域中運行這些對象。更為重要的是,它能夠一次從多個用戶端接受任務。

在學習完本篇文章後,讀者將能夠:

━━建立伺服器/用戶端對象之間的串連。

━━按值傳遞對象。

━━按地址傳遞對象。

━━理解遠程任務分配的概念。

遠程對象

遠程對象通過地址傳遞對象或者通過對象的值傳遞對象。

在第一種情況下,對象的地址由應用域A傳遞到應用域B,但對象的方法調用在應用域A和應用域B之間。對象在應用域A中存在和運行,但在應用域B中也象是個本地的對象。

在第二種情況下,整個對象及其附屬的實體(被稱作對象圖表)被序列化成位元組的形式,並從應用域A被傳送到應用域B。然後,對象在應用域B被“反序列化”並恢複到原來的狀態。現在,對象就在應用域B上存在和運行了。

建立對象主機(也被稱作伺服器)

設立伺服器需要作的第一步是在對象進行通訊的二個應用域間建立一條通道,它可以是一條TCP/IP通道或HTTP通道。TCP通道的速度較快,適用於對網路內資訊包傳輸限制較少的網路使用,HTTP通道更靈活,適合在互連網等廣域網路上使用。

我們將使用TCP/IP通道,而且將在同一台機器的二個不同的應用網域名稱上同時運行伺服器端和客戶機端。因此,輸入下面的代碼在TCP/IP堆棧上的8065連接埠建立通道myChannel:

TcpChannel myChannel = new TcpChannel(8065);

下面是向.NET的通道服務註冊myChannel通道,這將使該通道可以在伺服器應用域之外被訪問。我們可以通過下面的代碼實現這一目的:

ChannelServices.RegisterChannel(myChannel);

最後一步是告訴.NET的遠程執行基礎架構有關我們要開放的對象的有關情況,我們需要公布對象的類型和位置,用戶端定位對象所使用的名稱和.NET的遠程基礎架構對對這一對象調用的處理方式。我們可以通過下面的代碼擷取對象的類型:

Type objectType = new MyCoolObject().GetType()

通過下面的代碼就可以向.NET遠和基礎架構註冊該對象:

RemotingConfiguration.RegisterWellKnownServiceType(
objectType, "MyCoolObject",
WellKnownObjectMode.Singleton);

對象的調用有二種處理方式:Singleton和SingleCall。在Singleton方式中,在第一次用戶端方法調用時建立對象,並保持對象存在直到用戶端中止串連或對象自然死亡;在SingleCall方式中,每次用戶端的方法調用都會建立對象,對象只在方法調用持續期間存在,一旦方法調用結束,對象就會死亡。SingleCall方式中,用戶端串連不會隨方法調用的結束而中止,只有對象會隨著方法調用的結束而被殺死。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.