最近在項(xiàng)目中,遇到了一個(gè)需要在遠(yuǎn)程監(jiān)視自動運(yùn)行軟件的實(shí)時(shí)情況的例子。因?yàn)镸S面向服務(wù)方面有WCF,而且看了一些資料,覺得WCF比較適合這個(gè)應(yīng)用。因此決定用WCF來實(shí)現(xiàn)這個(gè)功能。
首先,先說一下具體的應(yīng)用,監(jiān)控,顧名思義,有兩個(gè)方面的意思,一方面是”監(jiān)”,也就是遠(yuǎn)程要能實(shí)時(shí)查看終端的各種情況。這里其實(shí)指的就是被監(jiān)控的要能主動的,實(shí)時(shí)的向遠(yuǎn)程控制端發(fā)送自己的情況。另一方面是控,即遠(yuǎn)程端能夠發(fā)布命令控制終端進(jìn)行執(zhí)行。并由終端返回一定的執(zhí)行信息。
而且這里是一種一對一對多的關(guān)系,即一個(gè)終端可以被多個(gè)管理端監(jiān)控。實(shí)際上一個(gè)管理端也可以監(jiān)控多個(gè)終端,在是這種分析中,我們可以明白,真正運(yùn)行服務(wù)的是終端,而不是管理端。
簡單起見,假定遠(yuǎn)程發(fā)送命令的操作是void Operation(),終端更新的操作是UpdateStatus();
這個(gè)想法,從設(shè)計(jì)到實(shí)現(xiàn),經(jīng)歷以下三種階段的變形。
最初的想法,是一個(gè)Service類。一個(gè)接口。即
即控制端調(diào)用operation發(fā)送命令,終端調(diào)用UpdateStatus更新狀態(tài)。
對應(yīng)的,要有一定的回調(diào),即控制端發(fā)送Operation時(shí),終端要有一個(gè)callBack進(jìn)行接收,相應(yīng)的,當(dāng)終端用UpdateStatus時(shí),控制端也要有一個(gè)callBack進(jìn)行接收。
當(dāng)這兩種操作被集成到一個(gè)服務(wù)中時(shí),我們的wcf接口變成了如下結(jié)構(gòu)。

Code
namespace Geyunfei.WCF
{
[ServiceContract(
SessionMode = SessionMode.Required
,
CallbackContract = typeof(ISeviceCallBack)
)]
public interface IService
{
[OperationContract]
///
/// 遠(yuǎn)程發(fā)送控制命令
///
///
void Operation();
[OperationContract]
///
/// 更新狀態(tài)
///
void UpdateStatus();
}
public interface ISeviceCallBack
{
void ReceiveStatus();
void ReceiveCommand();
}
public static class Global
{
public static List<ISeviceCallBack> callBacks = new List<ISeviceCallBack>();
}
[ServiceBehavior]
public class Service : IService,IDisposable
{
ISeviceCallBack callBack;
#region IService Members
public Service()
{
callBack = System.ServiceModel.OperationContext.Current.GetCallbackChannel<ISeviceCallBack>();
Global.callBacks.Add(callBack);
}
///
/// 當(dāng)服務(wù)端調(diào)用這個(gè)時(shí),向終端發(fā)命令
///
public void Operation()
{
foreach (var r in Global.callBacks)
{
r.ReceiveCommand();
}
}
///
/// 當(dāng)終端調(diào)用時(shí),向服務(wù)端發(fā)命令
///
public void UpdateStatus()
{
foreach (var r in Global.callBacks)
{
r.ReceiveStatus();
}
}
#endregion
#region IDisposable Members
public void Dispose()
{
Global.callBacks.Remove(this.callBack);
}
#endregion
}
}
NET技術(shù):用WCF實(shí)現(xiàn)對無人終端的遠(yuǎn)程監(jiān)控,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。