.net remoting的應用中,經常碰到需要預定remoting object的事件的情況,要能使遠端事件發布/預定如預期中的進行,需要注意如下問題:
1. remoting 配置
在remoting配置檔案中,需要將typefilterlevel設定為full,否則,將出現remotinghandler無法序列化的異常。
如可能的channels配置:
《server端》
<《對應的client端》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
>
2.客戶端中預定事件的宿主類(以下稱 host class)必須從marshalbyrefobject繼承。這是因為當host class將事件處理控制代碼註冊到遠端伺服器時,控制代碼中包含了host class的引用,所以host class需要從marshalbyrefobject繼承,以便遠端服務物件能取得host class引用。這個時候,可以將host class看成遠端服務物件,而真正的remotingobject變成了客戶端。<
channels
>
<
channel
ref="tcp"
port
="0"
>
<
serverproviders
>
<
provider
ref="wsdl"
/>
<
formatter
ref="soap"
typefilterlevel
="full"
/>
<
formatter
ref="binary"
typefilterlevel
="full"
/>
serverproviders
>
channel
>
channels
>
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...