2010-02-11 3 views
2

데이터베이스를 유지 관리하는 데 사용될 Windows 서비스에서 호스팅되는 구성 항목에 사용하는 WCF 서비스가 있습니다. 호스팅 서비스 내부에서 WCF 서비스에 액세스 할 수있는 방법이 있습니까? 아니면 데이터베이스 기능을 다른 WCF 서비스로 옮겨서 Windows 서비스 내부에서 호스팅해야합니까?WCF 서비스와이를 호스팅하는 Windows 서비스간에 통신 할 수 있습니까?

답변

3

서비스 클래스 (서비스 인터페이스를 구현하는 하나)은 귀하가 서비스를 호스팅하는 ServiceHost 인스턴스에 액세스 할 수 있습니다 속성

OperationContext.Current.Host 

있습니다. 꽤 쉽게 해당 서비스 호스트에 액세스 할 수 있습니다.

서비스 호스트를 넘어서서 서비스 호스트가 포함 된 NT 서비스를 조작하거나 쿼리 할 수있는 기본 제공 방법이 없습니다. 하지만 항상 NT 서비스 자체에 필요한 액세스 권한을 부여하는 사용자 지정 ServiceHost 자손 클래스를 만든 다음 서비스 구현을 위해 해당 사용자 지정 서비스 호스트를 사용할 수 있습니다.

사용자 지정 서비스 호스트를 사용하면 기본적으로 ServiceHost에서 자손을 만들고 필요한 작업을 수행 할 수 있습니다.

+0

나는 그것을 할 수 있는지 몰랐다. 꽤 멋진. – InTheFlatField

+0

OperationContext.Current.Host에서 반환 한 참조를 MyCustomServiceHost 클래스로 캐스팅해야합니다. 그리고 내 wcf 서비스 프로젝트가 Windows 서비스 프로젝트에서 참조되므로이 사용자 정의 ServiceHost 클래스는 wcf 프로젝트 내에 있어야합니다. 그래서 나는 뭔가를 놓치지 않는 한 까다로워진다. – maulik13

+0

@ Maulik13 : 자신의 'MyCustomServiceHost'의 * custom * 기능을 사용하려면 - 그렇다면 해당 유형의 변수에 대한 참조를 캐스팅해야합니다. 그리고 ** NO **, 커스텀 서비스 호스트 클래스는 WCF 프로젝트 안에있을 필요가 없습니다. 기본적으로 어느 곳에서나 사용할 수 있습니다 (물론 WCF 프로젝트에 대한 ** 참조 **가 필요합니다). –

1

서비스에 전화 할 수 있는지 여부를 묻는 "액세스"가있는 경우 서비스가 자체 클라이언트가 될 수 있습니다.

웹 서비스라는 사실과 실제 작업을 수행하는 다른 모든 부분으로 서비스를 분리하는 것이 더 좋을 수도 있습니다. Windows 서비스에서 후자의 부분을 호출하게하십시오.

0

내가하는 일은 사용자 지정 InstanceProvider를 사용하여 WCF 서비스의 생성자에 공유 개체를 전달하는 것입니다. 이렇게하면 WCF 서비스에 기본이 아닌 생성자를 사용할 수 있습니다.

공유 개체를 사용하면 WCF 서비스가 Windows 서비스 (또는 공유 개체에 액세스 할 수있는 다른 개체)와 "대화"할 수 있습니다.

관련 문제