C Remoting Event 遠端事件總結

2021-06-16 05:40:06 字數 2270 閱讀 4462

.net remoting的應用中,經常碰到需要預定remoting object的事件的情況,要能使遠端事件發布/預定如預期中的進行,需要注意如下問題:

1. remoting 配置

在remoting配置檔案中,需要將typefilterlevel設定為full,否則,將出現remotinghandler無法序列化的異常。

如可能的channels配置:

《server端》

<

channels

>

<

channel

ref="tcp"

port

="9009"

>

<

serverproviders

>

<

provider

ref="wsdl"

/>

<

formatter

ref="soap"

typefilterlevel

="full"

/>

<

formatter

ref="binary"

typefilterlevel

="full"

/>

serverproviders

>

<

clientproviders

>

<

formatter

ref="binary"

/>

clientproviders

>

channel

>

channels

>

《對應的client端》

<

channels

>

<

channel

ref="tcp"

port

="0"

>

<

serverproviders

>

<

provider

ref="wsdl"

/>

<

formatter

ref="soap"

typefilterlevel

="full"

/>

<

formatter

ref="binary"

typefilterlevel

="full"

/>

serverproviders

>

channel

>

channels

>

2.客戶端中預定事件的宿主類(以下稱 host class)必須從marshalbyrefobject繼承。這是因為當host class將事件處理控制代碼註冊到遠端伺服器時,控制代碼中包含了host class的引用,所以host class需要從marshalbyrefobject繼承,以便遠端服務物件能取得host class引用。這個時候,可以將host class看成遠端服務物件,而真正的remotingobject變成了客戶端。

3.事件處理函式必須是public的,因為真正的remotingobject需要通過host class的**訪問到這個函式,如果是private,將會丟擲「無法序列化private方法」的異常。

4.遠端服務端需要引用(在執行時自動查詢)host class所在的assembly,所以如果host class僅包含在客戶應用程式(如client.exe)中,則需要將client.exe拷貝到遠端伺服器程式所在目錄。最好的辦法是,將host class放在乙個公共的.dll中,然後分別由伺服器和客戶端引用。

5.事件處理函式若含有引用型別的引數,則引數要麼是可序列化的,要麼從marshalbyrefobject繼承,原因同三。當引數型別是從marshalbyrefobject繼承的時候,就更複雜了,需要你仔細分析(因為這個引數型別中可能還包含其它的引用型別)。

6.事件處理函式丟擲的異常必須是可序列化的--其實,你應該保證所有的自定義異常都必須是可序列化的。

7.remoting object在觸發遠端事件的時候,必須對每乙個事件處理函式進行論詢觸發,並捕獲每一次觸發丟擲的異常,否則,當異常發生後,後面的事件處理函式就不會被呼叫了。應該像下面這樣:

if(

this

.servicelistchanged

!=null

)catch

(exception ee)}}

遠心鏡頭的遠心度

不同廠家的遠心鏡頭消除透視誤差的能力也有差異,這是因為遠心度不同。遠心度定義為主光線與光軸間的夾角 如圖所示。另外,大多數工程師對景深和遠心度有誤解,認為遠心鏡頭的景深比普通鏡頭大。但前幾期我們專門討論過景深,知道景深只與瀰散斑直徑 鏡頭fno.放大倍率相關,與遠心度無關。遠心鏡頭優點 1 最突出特...

《方與圓》 丁遠峙

方與圓 丁遠峙 2012年01月15日 全國最暢銷的人文書之一 方 就是做人的正氣,具備優秀的品質。圓 就是處事老練,圓通,善用技巧。做人就必須方外有圓,圓中有方,外圓而內方。乙個人要幹出一番事業,要真正懂得為人處世,要取得生活快樂,最重要的首先要具備優秀的品質。乙個人的成功主要依靠什麼?往往很大程...

Socket與ServerSocket遠端桌面

目的 通過socket與socketserver的通訊實現遠端監控 首先,在serversocket 被監控端 一直截圖傳送到socket。再到socket 客戶端 中不斷接收截圖內容並展示出來。如下 伺服器 public class remoteserver catch ioexception e...