2013-04-12 2 views
0

응용 프로그램 간의 미들웨어 역할을하는 WCF 서비스가 있습니다. WCF는 여러 클라이언트 (예 : 시스템 A)로부터 여러 번의 호출을받습니다. 각 호출은 다른 시스템 (예 : 시스템 B)을 호출합니다.WCF는 단일 스레드입니까? 통화를 동기화 하시겠습니까?

시스템 B에 대한 호출을 매번 하나씩 수행 할 수 있습니까? 전화를 paralelyzing 대신?

답변

3

시스템 B가 어떤 스레드를 호출할지 신경 쓰지 않지만 시스템 B가 전역 변수 나 전역 변수를 사용하고 있기 때문에 여러 스레드가 동시에 호출하지 않도록하고 싶을 수도 있습니다 상태), 간단한 뮤텍스 잠금을 사용하여 모든 스레드를 정렬하고 시스템 B 단일 파일을 탐색 할 수 있습니다. 이런 식으로 :

public class MyClass 
{ 
    private static object _lockObj = new Object(); 

    public void MyFunction() 
    { 
    lock(_lockObj) 
    { 
     system_B_call(etc); 
    } 
    } 
} 

중요 : "차단"하려는 모든 기능은 동일한 잠금 개체 인스턴스를 사용해야합니다.

시스템 B가 호출되는 스레드 (WinForms 및 WCF를 비롯한 많은 UI 프레임 워크는 기본 UI 스레드에서 UI 변경이 필요함)에 민감한 경우 호출을 특정 스레드로 마샬링해야합니다. 이를 수행하는 방법에는 여러 가지가 있으며, 그 중 하나는 SynchronizationContext 및 해당 게시 또는 전송 방법을 사용하는 것입니다.