2011-09-23 60 views
0

我有我的軟件(.NET)在客戶端上運行。只要有新的更新可用,我就需要通過網絡將更新推送到客戶端。使用PUSH方法實現自動更新服務器和客戶端

我想實現一個在服務器上運行的Web服務,它向客戶端廣播更新通知。對於dat,CLient必須通過網絡將其身份註冊到服務器。

服務器將發送有關更新可用性的通知。客戶端必須從服務器下載更新(即)服務器將開始上傳過程,客戶端必須下載。

我不希望程序總是在客戶端計算機上運行並檢查更新。

WCF會是不錯的選擇嗎? ..是否有可能實施? ..我知道在網絡環境中有這麼多限制。建議歡迎...

回答

1

軟件更新我不會做推送通知,除非客戶端軟件始終都在運行。當軟件首次啓動時,更好的選擇可能是讓客戶端與服務器一起檢查新的更新。維護較少,實施起來也較容易。通過推送通知,客戶端總是必須有一個監聽器,客戶端可能會關閉監聽器。您還將擁有維護所有連接清單的開銷。如果所有客戶端都在同一個網絡上運行,請點擊一次部署可能是一個選項。它允許您對其進行配置,以便在發佈新更新時客戶端必須進行更新。

0

是的,你可以實現推送功能從服務器到客戶端。您只需通過使用WCF服務存儲每個客戶端的實例上下文對象並調用將在客戶端實現的回調方法來維護服務器中的連接客戶端列表。所以所有的客戶端都會通過回調方法進行更新。

可以存儲客戶端的情況下上下文對象像下面,在客戶名單是哈希表:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
    public class HostService : IHostService 
    { 

    public bool Connect(Guid applicationId) 
    { 
    if (!ClientList.ContainsKey(applicationId)) 
         { 
          IHostServiceCallback client = OperationContext.Current.GetCallbackChannel<IHostServiceCallback>(); 
    ClientList.Add(applicationId, client); 
    } 
} 

接口的主機服務:

[ServiceContract] 
    public partial interface IHostServiceCallback 
    { 
     [OperationContract(IsOneWay = true)] 
     void SendNotification(string message); 
} 
:服務

[ServiceContract(CallbackContract = typeof(IHostServiceCallback), SessionMode = SessionMode.Required)] 
    public partial interface IHostService 
    { 
     [OperationContract] 
     bool Connect(Guid applicationId); 
} 

回調類

當您的服務器在任何事件處理程序中收到通知時,將其發送給所有客戶端li柯:

private void Notification_Received(object sender, EventReceivedEventArgs e) 
{ 
foreach (IHostServiceCallback client in ClientList.Values) 
      { 
       try 
       { 
        client.SendNotification(notificationMessage); 
       } 
       catch 
       { 
       } 
      } 
} 

在客戶端應用程序,您已經實現回調方法,如:

public partial class Window1 : Window, IHostServiceCallback 
{ 
    public void SendNotification(string message) 
    { 
      // do some operation 
    } 
} 
相關問題