Remoting程式設計知識二

2022-04-12 11:52:55 字數 3216 閱讀 4251

一、 如何使用iis作為啟用**

.net remoting和dcom之間的乙個區別是前者不支援自動執行的伺服器程序。需要人工啟動伺服器程序來註冊用來遠端啟用的類和監聽請求。而對於dcom,當遠端客戶端呼叫cocreateinstanceex或者其他啟用api時,會自動執行伺服器程序。

.net remoting 提供了兩種方法來避免人工啟動伺服器。第乙個是將伺服器應用程式當做乙個服務來實現。可以編寫乙個從 system.serviceprocess.service派生的服務,過載其中關鍵的需方法例如onstart和onstop。將伺服器當做乙個服務來實現的好處是你可以配置該服務以便系統啟動時能自動執行該服務。

第二個方法是使用iis作為啟用**。iis本身就是乙個服務,在大多數web servers執行時會一直啟動。而且iis能夠通過使用.net remoting機制來響應客戶端啟用物件的請求。使用iis有以下幾個好處:

1、不再需要編寫乙個用來註冊可遠端化的類和監聽埠的伺服器,iis就是伺服器。

2、可以使用iis鑑別遠端呼叫者,也可以使用ssl來保護資料。

3、可以使用iis來管理埠。如果在乙個機器上部署了兩個傳統的應用程式伺服器,則需要你來保證這兩個伺服器使用不同的埠。使用iis作為宿主,則iis可以選擇埠,這樣可以簡化發布和管理。

iis支援伺服器端啟用物件和客戶端啟用物件。可以使用程式註冊(在global.asax中),也可以使用宣告註冊(在web.config中)。

1、伺服器端啟用物件

下面的web.config註冊了使用iis啟用的clock類:

注意clock的uri:clock.rem。使用iis註冊的uri必須以.rem或者.soap結束,因為該擴充套件對應到iis原資料中的aspnet_isapi.dll和machine.config中的.net remoting 子系統。

使用iis啟用物件都是通過http通道來與客戶端進行通訊。客戶端必須註冊http通道。下面是乙個客戶端如何建立乙個clock例項,假設clock在本地機器上乙個叫myclock的虛擬目錄中。

注意伺服器和客戶端都沒有指定埠,iis選擇該埠

2、客戶端啟用物件

下面是客戶端的寫法(依然假設clock在本地機器myclock虛擬目錄中):

注意:使用iis必須在虛擬目錄中有乙個可遠端化的類,而且必須把 web.config放在單獨的虛擬目錄中(例如myclock),把dll放在bin子目錄中(myclock\bin)。

二、 如何通過http通道傳遞二進位制格式資料

使用iis的乙個缺點是只能使用http通道。http通道將呼叫封裝成soap訊息,這樣會增加訊息的長度。iis只支援http通道,但它並不要求使用將通道呼叫封裝成soap訊息。預設情況下,http使用soap,因為它使用soapclientformattersinkprovide和 soapserverformattersinkprovider來作為序列化和反序列化訊息的格式。可以使用binaryclientformattersinkprovider和 binaryserverformattersinkprovder來替換它們。二進位制訊息可以跟好的利用網路頻寬。

下面的web.config檔案註冊了乙個可以被iis啟用的clock,它使用二進位制替換了預設的soap格式。

客戶端寫法如下:

當使用配置檔案時,寫法為:

remotingconfiguration.configure ("client.exe.config");

clock clock = new clock ();

配置檔案內容如下:

使用相同的方法,你也可以在tcp通道中使用soap格式封裝訊息。你甚至可以將自己的格式化方法插入到現有的通道中。

三、 如何使用事件和**

假設你建立了乙個clock 類,包括乙個newhour事件,**如下:

public delegate void newhourhandler (int hour);

public class clock : marshalbyrefobject

在iis上使用的web.config檔案如下:

注意ref屬性,http值使得two-way httpcannel代替了one-way httpserverchannel。

客戶端也註冊了乙個two-way httpchannel,並且指定埠號為0。0值使得通道監聽**,當然也可以允許.net框架來選擇埠數。

四、 如何非同步呼叫乙個可遠端化物件

預設情況下,,呼叫遠端物件是同步的。

Remoting 二 遠端物件

在分布系統中,遠端物件需要跨越應用程式域進行傳遞,因此其表示方式會有所不同。基於效能和資料共享等原因考慮,remoting 中遠端物件可以是 值封送物件 mbv 或 引用封送物件 mbr mbv 機制類似於 web 無狀態請求,伺服器建立物件例項傳遞給通道傳送到客戶端,而後伺服器端不再繼續維護其狀態...

Remoting 二 遠端物件

在分布系統中,遠端物件需要跨越應用程式域進行傳遞,因此其表示方式會有所不同。基於效能和資料共享等原因考慮,remoting 中遠端物件可以是 值封送物件 mbv 或 引用封送物件 mbr mbv 機制類似於 web 無狀態請求,伺服器建立物件例項傳遞給通道傳送到客戶端,而後伺服器端不再繼續維護其狀態...

linux高階程式設計二基礎知識

shell 一 shell命令 1.shell是一種命令直譯器 2.shell的種類 1.bash 2.sh 3.ksh 4.csh 5.3.檢視當前的shell型別 echo shell 4.檢視系統能支援的shell vi etc shells 5.command options arg1 ar...