2012-05-14 3 views
1

현재 수신 데이터의 직렬 포트를 모니터링하고 데이터를 처리하며 수신 된 데이터를 기반으로하는 대리자/이벤트를 통해 이벤트를 발생시키는 클래스가 있습니다. 이것은 독립 실행 형 응용 프로그램입니다. 이제는 서비스로 변환해야하므로 직렬 포트 모니터 클래스는 Windows가 시작될 때 서비스로 시작되고 클라이언트 응용 프로그램은 원격 PC 또는 로컬 시스템의 이벤트를 구독합니다. 이런 종류의 응용 프로그램에 WCF를 사용하는 것에 대한 많은 기사를 보았습니다. 그러나 WCF는 메시지를 기반으로하며 클라이언트 요청시 서비스를 만듭니다. 하지만 내 요구 사항은 서비스가 자동으로 시작되고 클라이언트 응용 프로그램이 시작 중에 이미 생성 된 서비스 클래스 인스턴스의 이벤트에 가입 할 수 있어야한다는 것입니다. 어떻게 이것을 WCF를 사용하여 얻을 수 있습니까?WCF 서비스를 사용하여 이벤트 처리

답변

1

WCF의 기본 동작은 각 들어오는 요청을 처리하는 서비스 클래스의 새 인스턴스를 만드는 것입니다,하지만 당신은 당신의 클래스를 장식하여이를 대체 할 수 있습니다 :

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] 

는 싱글과 좋은 성능을 얻으려면 당신은 가능성이 싱글 인스턴스의 일부 구성을 수행해야하기 때문에

  • 당신이 아마 싱글 걸리는 ServiceHost 생성자 방법을 사용하는 것이 좋습니다 :하지만, 당신이 생각해야 할 몇 가지가있다 인스턴스를 인수로 사용합니다. (예 : Figure 8 Initializing and Hosting a Singleton in this article
  • 스레딩 : 기본 스레딩 모델 (ConcurrencyMode)은 한 번에 하나의 스레드 만 Singleton 인스턴스에 액세스 할 수 있도록 허용하므로 성능을 높이려면 ConcurrencyMode = ConcurrencyMode.Multiple을 사용해야합니다. 스레딩 관련 문제를 스스로 처리해야합니다.)
  • 콜백 계약의 메소드가 [OperationContract(IsOneWay = true)]으로 표시되어 구독자에게 게시 이벤트가 전달 되어도 이벤트 처리기가 완료 될 때까지 서비스 인스턴스가 차단되지 않도록하십시오. . (이런 식으로 WCF를 사용하면 covered in detail in this article by Juval Lowy
+0

답장을 보내 주셔서 감사합니다. 나는 무엇을 찾고 있는가? 나는 많은 것들을하는 한 반을 가지고있다. 기본적으로 WCF에 대해서만 클래스를 변경하고 싶지 않습니다. 나는 훌륭한 링크를 "http://msdn.microsoft.com/en-us/magazine/cc163537.aspx"라고 생각했다. 게시자와 구독자는 두 가지 다른 서비스입니다. –

관련 문제