2012-07-01 4 views
0

나는 WCF 서비스를 가지고 있는데, 여기에는 여러 클라이언트가 연결되어 있고 이벤트를 구독하고있다.'Producer Consumer Queue'에서 작동하는 WCF 서비스를 만드는 방법은 무엇입니까?

은 또한 호스팅 WCF 서비스와 함께, 백그라운드에서 실행하고 작업을 수행하고 '프로듀서 \ 소비자 큐'에 항목을 미는 작업자 스레드 있습니다.

대기열에 항목이있는 경우 WCF 서비스를 작동 시켜서 대기열에서 항목을 추출하여 분석하고 구독 한 모든 클라이언트에 메시지를 게시 할 수 있도록하려면 어떻게해야합니까?

WCF 서비스가 연결된 클라이언트에서 호출 된 작업에 반응하지만 항목이이 큐에 대기 중일 때 응답하도록하려면 어떻게해야합니까?

가능한 경우 간단한 코드 샘플로 답변 할 수있는 사람이면 누구나 고맙게 생각합니다.

답변

1

가장 간단한 방법은 wcf 서비스가 대기열에서 대기열에 넣기 이벤트를 처리 할 수있는 이벤트가 필요하며 이벤트가 발생하면 메시지 처리를 시작하는 것입니다. 일반이 아닌 큐의 경우 Enqueue 메서드를 재정 의하여 OnChanged 이벤트를 발생시킬 수 있습니다. 일반적인 큐에서 이벤트를 발생하는 방법

public override void Enqueue(object obj) 
{ 
    base.Enqueue(obj); 
    OnChanged(EventArgs.Empty); 
} 

자세한 내용은이 최고되지 않을 수도 있습니다, 내 생각이 여기에 here

//from worker thread 
queue.Enqueue(some_object); 

//in wcf you could probably do something like this 
queue.OnChanged += ProcessMessage; 

public void ProcessMessage(object sender, EventArgs e) 
{ 
    lock(lock_object) 
    { 
      var some_object = queue.Dequeue; 
      //processing logic and broadcasting to client 
    } 
} 
+0

예.하지만 WCF 서비스는이 이벤트에 대해 어디에서 등록합니까? 서비스의 생성자에서? 서비스가 클라이언트 중 하나에서 메시지를 처리 ​​할 때 이벤트가 발생하면 어떻게됩니까? 이 좋은 프로그래밍인가? 그것처럼 보이지 않습니다 ... –

+1

여러 스레드에서 작업 할 때마다 경쟁 조건이 발생합니다. 프로그래머가 우리에게 맡겨야 할 부담은 멀티 스레드 응용 프로그램을 사용하지 않기로 결정한 것입니다. 면밀히 살펴보면 경쟁 조건을 피하기 위해 항목을 큐에서 빼는 동안 "잠금"문을 사용했습니다. 나는 좋은 프로그래밍의 개념이 무엇인지 이해하지 못합니다. – Anand

+1

"이 이벤트의 WCF 서비스 등록 위치는 어디입니까?" 예 생성자가 좋은 것으로 보입니다. (내가 너라면, 큐를 정적으로 만들 것이다.) 또한 작업 스레드가 wcf 서비스 내에서 생성되기를 바랍니다. – Anand

0

을하지만 그것은 시작이다. 시나리오에 필요한 기능을 구현하려면 두 개의 WCF 서비스를 만드십시오. 첫 번째 서비스는 기본적으로 대기열을 보유하고 관리하는 QueueService입니다. 두 번째 서비스는 PublisherService라고 부릅니다.이 서비스는 큐에 새 항목이 추가되거나 제거 될 때 QeueService가이를 알리기위한 용도로 사용됩니다. 이를 달성하려면 PublisherService가 QueueService의 클라이언트 역할을하는 이중 채널 (게시 구독 패턴 http://msdn.microsoft.com/en-us/library/ms752254.aspx 적용)을 사용해야합니다. 이제 PublisherService를 소비 할 고객에 대해 ... 지금까지 어떤 기법을 사용했는지 확신 할 수 없습니다. 양면 채널이나 연속 스트리밍을 사용하여 PublisherService에서 데이터를 가져오고 있습니까? (http://blog.john-thiriet.com/ko/2011/08/using-reactive-extensions-for-a-push-based-client-server-communication-with-silverlight-and-wcf/)

관련 문제