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

Code
namespace Geyunfei.WCF
{
[ServiceContract(
SessionMode = SessionMode.Required
,
CallbackContract = typeof(ISeviceCallBack)
)]
public interface IService
{
[OperationContract]
///
/// 遠程發送控制命令
///
///
void Operation();
[OperationContract]
///
/// 更新狀態
///
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);
}
///
/// 當服務端調用這個時,向終端發命令
///
public void Operation()
{
foreach (var r in Global.callBacks)
{
r.ReceiveCommand();
}
}
///
/// 當終端調用時,向服務端發命令
///
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技術:用WCF實現對無人終端的遠程監控,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。