2009-09-03 2 views
2

어떻게이 시나리오를 수행 할 수 있습니까?WCF : 서비스 내부에서 Windows 양식 액세스

저는 WCF 서비스가 Windows 형식으로 호스팅되어 있으며 서비스 클라이언트가 서비스의 메서드를 호출 할 때마다 서비스가 Windows 양식의 텍스트 상자에 메시지를 쓸 수있게하려고합니다.

나는 WCF 서비스를 싱글 톤으로 만들고 양식이 구현 한 인터페이스를 사용하여 양식을 서비스에 전달한 다음 해당 인스턴스를 저장한다고 생각했습니다. 그러면 클라이언트가 서비스를 호출 할 때 단순히 양식 인스턴스를 사용하여 텍스트 상자에 쓸 수 있습니다.

Form을 WCF 서비스에 전달할 수 없으므로이 작업을 수행 할 수 없습니다.

아이디어 나 코드 샘플이 있습니까?

+0

누군가가 WinForms 응용 프로그램을 실행하는 경우에만 서비스가 작동합니까? –

답변

1

내가 이해하는 한 기본적으로 같은 질문입니다. this SO answer을보십시오.

은 WCF 서비스에 종속성을 주입합니다. 모든 것을 연결하는 사용자 지정 ServiceHostFactory를 구현하기 만하면됩니다.

2

서비스 인스턴스와 Windows 양식은 두 개의 개별 스레드에서 실행되며 서비스 인스턴스에서 기본 UI 스레드의 UI 요소를 업데이트 할 수 없습니다.

서비스 스레드에서 UI를 적절하고 안전하게 업데이트하려면 동기화 컨텍스트와 대리자를 사용해야합니다.

this CodeProject 문서를 참조하십시오. 중간에 작성자가 "UI thread woes"에 대해 이야기합니다. 그것은 당신이해야 할 일을 기본적으로이다 :

SendOrPostCallback callback = 
    delegate (object state) 
    { 
     yourListBox.Add(state.ToString()); 
    }; 

_uiSyncContext.Post(callback, guestName); 

주제에 대한 포괄적 인 소개에 대한 참조 쥬발 로이의 MSDN 문서 " WCF Synchronization Contexts".

Winforms 응용 프로그램 내에서 WCF 서비스를 호스팅하는 것이 나에게 나쁜 생각 인 것 같습니다. 우선 모든 스레딩 문제로 인해서, 두 번째로는 winforms 응용 프로그램이 작동하는 경우에만 작동합니다. WCF 서비스를 콘솔 응용 프로그램이나 Windows NT 서비스에 넣을 수 없으며, Winforms 기반의 모니터링 응용 프로그램을 만들면됩니다. 들어오는 요청 메시지 또는 뭔가를위한 데이터베이스 테이블?

마크

+1

리치 클라이언트 내에서 WCF 서비스를 호스팅하는 것이 매우 유효한 시나리오입니다. 예를 들어 콜백 채널을 구현하거나 피어 투 피어 네트워크를 설정하는 등의 작업을 할 수 있습니다. WCF는 단순한 서버 기반 기술 이상의 것입니다. –

관련 문제