2010-06-28 5 views
0

약간의 정보를 읽으면서 클라이언트가 내 서비스에 연결되었다는 것을 탐지하는 유일한 방법은 내 자신의 코드를 작성하는 것입니다. 싱글 톤 서비스를 사용하고 있습니다. 클라이언트가 xxx가 연결된 클라이언트 x가 내 서비스에 연결할 때마다 메시지를 표시하고 싶습니다. 생성되는 내장 이벤트가 없습니까? 나 맞아?클라이언트가 wcf 서비스에 연결된 경우 감지하기

답변

0

아니요, 귀하의 요구 사항에 대한 WCF의 지원이 있다고 생각하지 않습니다.

당신이 달성하고 싶은 것이 확실하지 않습니다. 귀하의 서비스 클래스 (귀하의 경우 단일 인스턴스)에는 메시지를 표시하는 비즈니스가 실제로 없습니다 (화면에 표시됩니다). 실제로는 그렇지 않습니다. 서비스 클래스는 요청을 처리하고 응답을 전달하는 데 사용됩니다.

ServiceHost 클래스는이 기능의 후보가 될 수 있지만 서비스를 호스팅하고 WCF 런타임 등을 돌리는 것이 실제 업무이며 UI 구성 요소도 아닙니다.

당신이 가능하게 할 수있는 것은이

  • 는 관리자 UI (윈폼, 콘솔 또는 WPF 응용 프로그램)이
  • 이 정의를 호출하는 관리 서비스를 제공하는 서비스와 함께 당신의 서버에서 실행해야 두 서비스 간의 빠른 연결 (예 : netNamedPipe 바인딩을 사용하여 애플리케이션 내부 메시징에 적합)
  • "실제"서비스가 전화를 받으면 가장 먼저 관리 UI에 메시지를 보내고 그 메시지를 집어 들고 처리하십시오.

그런 식으로 실제 서비스와 작업 (서비스를 제공하기 위해)과 원하는 UI (관리 UI)를 분리하고 깨끗하게 분리 된 시스템을 구축 할 수 있습니다.

+0

내 관리 UI가 내 서버에서 실행되고 있지만 내 서비스와 함께 실행되지는 않으며 내 서비스 (열기 및 닫기) 시작 및 중지를 담당합니다. 또한 다른 서비스에 게시 된 질문 인 내 서비스의 인스턴스가 있습니다. 이것이 나의 현재 설정입니다. 내가 예상 한대로 답장에서 공제했는데 연결하는 클라이언트를 검색하려면 목록을 유지해야합니다. 내 자신 만의 일을해야합니다. (내 코드에서 일을 추적하십시오). 신속한 답장을 보내 주셔서 감사합니다. – Tamer

+0

비슷한 질문이지만 클라이언트가 서비스에 연결할 때 호스트 프로그램이 메시지 상자를 팝업하는 방법이 있습니까? – ZoomVirus

0

실제로 채널을 만든 후에 내 클라이언트에서 수동으로 호출하는 connect, disconnectping 서비스 메서드를 구현했습니다. 그것들을 내 ServiceContract 인터페이스 정의 (및 그 구현 방법)의 헤더 섹션의 일종으로 사용함으로써, 그들은 컷 앤 페이스트 (cut-n-paste)를 약간만 필요로하는 임시 "기본 서비스 정의"를 형성합니다.

connectdisconnect의 문자열 기반 매개 변수는 클라이언트 정보를 서버로 보내고 서버 정보와 클라이언트 (아마도 고유 연결 ID)를 클라이언트에 반환하는 데 사용됩니다. 또한 일련의 타이밍 참조 점도 삽입 될 수 있습니다.

SessionMode이 필요하며 개별 OperationContract 속성 IsInitiatingIsTerminating 명시 적으로 각각의 방법에 대해 지정하는 방법을 참고, 나는 그것이 유일한 세션으로 connectdisconnect를 정의하는 "단일 세션"서비스에라고 부르는 것을 최종 결과 북 엔드.

참고 또한 ping 명령이

:-) 하나의 설정 파일없이 ALL 연결 시간 제한을 서비스 연결 상태를 테스트하고 패배 타이머 기반 "하트 비트"호출의 대상으로 사용됩니다 또한 오류 처리 구조를 아직 결정하지 못했지만 아직 방법을 추가하거나 다른 종류의 변경이 필요할 수 있습니다.

[ServiceContract(SessionMode = SessionMode.Required)] 
    public interface IRePropDalSvr { 
     [OperationContract(IsInitiating=true, IsTerminating=false)] 
     string connect (string pClientInfo); 

     [OperationContract(IsInitiating=false, IsTerminating=true, IsOneWay=true)] 
     void disconnect (string pClientInfo); 

     // ------------------------------------------------------------------------------------------ 
     [OperationContract(IsInitiating=false, IsTerminating=false)] 
     string ping (string pInp); 

     // ------------------------------------------------------------------------------------------ 
     // REST OF ServiceContract DEFINITION GOES HERE 

주의 사항 : 현재이 코드를 서비스 클래스에 사용하고 있지만 아직 코드를 확인하지 않았습니다.

관련 문제