2011-01-20 4 views
4

winform 응용 프로그램이 있고이 응용 프로그램 내부에 WCF 서비스를 호스팅하려고합니다. 별도의 appdomain에서 호스팅해야합니까? 어떤 추천?WCF 서비스를 호스트하기위한 권장 사항은 무엇입니까?

+0

내 서비스를 호스팅하는 이유를 알고 싶습니다. 창 양식 앱. wouldnt 그것은에서 호스트하는 것이 더 나을 것입니다. Windows 서비스 b. IIS (옵션이있는 경우) 대신? – InSane

+0

Winforms 응용 프로그램 내에서 호스팅하는 경우 Winforms 응용 프로그램이 실행 중일뿐입니다. WCF 서비스에 대해 "24 시간"가용성이 필요한 경우이를 Windows NT 서비스에 저장하십시오. –

답변

4

별도의 도메인에서 호스팅 할 필요는 없지만 서비스 요청을 UI 스레드 또는 다른 스레드에서 처리할지 결정해야합니다. ServiceHost 인스턴스를 만들거나 서비스 클래스에 적용한 ServiceBehavior에 따라 다릅니다.

서비스가 UI 스레드에서 호스팅되는 경우 UI와 직접 상호 작용할 수 있지만 요청 처리는 메시지 루프의 일부이며 모든 서비스 요청은 단일 스레드 (순차적)로 처리됩니다. 요청이 처리되면 다른 Windows 이벤트 (UI 이벤트 포함)를 처리 할 수 ​​없습니다 = 응용 프로그램이 정지합니다.

서비스가 다른 스레드 환경에서 호스팅되는 경우 다른 호스트 환경과 동일하게 동작하지만 UI와 직접 상호 작용할 수는 없습니다. 위임 호출을 사용해야합니다.

방법은 자신의 스레드에서 실행되도록 서비스를 시행합니다 :

  • 당신이 (Windows 메시지 루프의 시작)
  • Application.Run를 호출하기 전에 작성 및 공개 ServiceHost 인스턴스를 생성하고 별도의 스레드
  • 을 오픈 ServiceHost 예 서비스 구현시 [ServiceBehavior(UseSynchronizationContext = false)]을 사용하십시오.
1

아니요, 별도의 AppDomain으로 호스트 할 필요가 없습니다. 그냥 주최하십시오. 이 점에 관해서 WinForms에는 특별한 것이 없습니다.

0

앱의 기능은 무엇입니까? 서비스가 앱의 정규 기능이나 완전히 독립된 논리적 개체의 일부입니까?

앱을 종료하지 않고 서비스와 관련된 리소스 (예 : 어셈블리)를로드하고 언로드하려는 경우 별도의 앱 도메인을 사용하면 훨씬 쉽게 처리 할 수 ​​있지만 그렇지 않으면 복잡한 이유가 많이 없습니다. 소지품.

그냥 2c입니다. :-)

0

Win 형태로 호스트 할 수 있지만 계속 실행해야합니다.

또한 IIS에서 호스트하여 모든 유형의 클라이언트가 서비스를 이용할 수 있도록 제안하십시오.

관련 문제