2011-09-23 2 views
0

클라이언트에서 내 소프트웨어 (.NET)를 실행하고 있습니다. 새로운 업데이트가있을 때마다 웹을 통해 클라이언트에게 업데이트를 푸시해야합니다.PUSH 방법을 사용하여 자동 업데이트 서버 및 클라이언트 구현

업데이트 알림을 클라이언트에 브로드 캐스팅하는 주 서버에서 실행되는 웹 서비스를 구현할 생각이었습니다. 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로 보내십시오. KE :

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 
    } 
} 
관련 문제