(原創)一步一步學remoting之六:事件(2)
到了午休的時間,抓緊時間繼續寫,上次說有2個遺留問題:
(1)關閉乙個客戶端以後會影響其他的客戶端事件
原因:客戶端沒有取消事件訂閱就關閉了,觸發事件的時候找不到事件訂閱者
解決:遍歷委託鏈,找到異常的物件,從委託鏈中卸下
(2)伺服器端對客戶端廣播,客戶端能收到其他客戶端的事件處理資訊
原因:使用了singleton模式,共享遠端物件
解決:因為需要遠端物件有狀態且不共享例項,所以只有客戶端啟用可以選擇
修改後的服務端:
using
system;
using
system.collections;
using
system.runtime.remoting;
using
system.runtime.remoting.channels;
using
system.runtime.remoting.channels.tcp;
using
system.runtime.serialization.formatters;
namespace
remoteserver }
} 修改後的遠端物件:
using
system;
namespace
remoteobject }
public
string
ip
} public
myeventargs(
intrate,
string
ip) }
public
class
myobject:marshalbyrefobject
console.writeline("來自
"+ip+
"的非同步方法結束
");
returna+
b; }
protected
void
onmyevent(myeventargs e)
catch}}
} }
public
class
eventclass:marshalbyrefobject
} }
修改後的客戶端:
using
system;
using
system.net;
using
system.collections;
using
system.text;
using
system.runtime.remoting;
using
system.runtime.remoting.channels;
using
system.runtime.remoting.channels.tcp;
using
system.runtime.serialization.formatters;
class
myclient
public
static
void
callback(iasyncresult iar)
} public
static
void
method() }
之所以要在ip位址後面跟上隨機數,是因為可能在乙個機器上會開啟多個客戶端,需要在這個時候能在伺服器端區分多個客戶端。
備註:我的所有例子都是在客戶端和伺服器端部署遠端物件的,其實這個做法不是很好,我們應該僅僅把介面部署在兩地,遠端物件僅僅部署在伺服器端即可。
原創 一步一步學Remoting之一 從簡單開始
一步一步學remoting之一 從簡單開始 一 remoting的優缺點?優點 1 能讓我們進行分布式開發 2 tcp通道的remoting速度非常快 3 雖然是遠端的,但是非常接近於本地呼叫物件 4 可以做到保持物件的狀態 5 沒有應用程式限制,可以是控制台,winform,iis,windows...
原創 一步一步學Remoting之一 從簡單開始
一步一步學remoting之一 從簡單開始 一 remoting的優缺點?優點 1 能讓我們進行分布式開發 2 tcp通道的remoting速度非常快 3 雖然是遠端的,但是非常接近於本地呼叫物件 4 可以做到保持物件的狀態 5 沒有應用程式限制,可以是控制台,winform,iis,windows...
一步一步學Remoting系列文章
原創 一步一步學remoting之一 從簡單開始 原創 一步一步學remoting之二 啟用模式 原創 一步一步學remoting之三 複雜物件 原創 一步一步學remoting之四 承載方式 1 原創 一步一步學remoting之四 承載方式 2 原創 一步一步學remoting之五 非同步操作 ...