2009-11-12 3 views
0

ServiceHost에서 구체적인 클래스 인스턴스를 검색하여 해당 클래스 이벤트에 대한 이벤트 처리기를 추가 할 수 있습니까? 클라이언트가 해봐요() 메서드를 호출 할 때WCF concrete 클래스 인스턴스에 대한 이벤트 처리기 추가

Public Class Widget 
     Public Event MessageCalled(sender as object, e as EventArgs) 
     Public Sub DoSomething() 
     '-- do a whole lot of stuff --' 
     RaiseEvent MessageCalled(Me, new EventArgs()) 
     End Sub 
End Class 


Private _host As New ServiceHost(GetType(Widget), New Uri() {New Uri("http://localhost:50000")}) 

그래서, 호스트의 MessageCalled() 이벤트를 처리 할 수 ​​있습니다.

클라이언트에서 이벤트를 처리하는 방법에 대해 이야기 한 적이 있지만 대부분 관심이 없습니다.

답변

1

이런 이벤트를 사용하는 대신 WCF 런타임에서 제공하는 확장 성 포인트를 사용하는 것이 더 나을 것이라고 생각합니다. 시작하려면 Extending WCF이라는 SDK 섹션을 확인하십시오.

달성하려는 내용에 대한 세부 정보를 좀 더 제공한다면 우리가해야 할 일에 대해 좀 더 구체적으로 제안 할 수 있지만 샘플 코드를 통해 모든 메시지에 관여하고 싶은 것처럼 보입니다. 귀하의 서비스와 교환되므로 어떤 정보를 기록 할 수 있습니까? 그렇다면 IDispatchMessageInspector을 구현하고 싶을 것입니다.

+0

감사합니다. 위에서도 언급했듯이, 내가 적응하고있는 코드는 이전의 리모팅 코드입니다. 장기적으로 WCF에 더 잘 부합하도록 리팩토링하는 것이 나을 것이라고 생각합니다. – Jayden

1

나는 그것이 무엇을 하려는지 완전히 이해하지 못하고 있지만 서비스 호스트로부터 서비스 클래스 인스턴스를 가져오고 싶습니다.

바쁜 시스템에 서비스 호스트가있는 경우 여러 동시 클라이언트 요청을 동시에 처리 할 수있는 가능성이 있습니다. 기본적으로 WCF에서 각 클라이언트 요청은 서비스 클래스의 자체 인스턴스를 가져옵니다. 다시 말해서 WCF 런타임은 서비스 호스트의 "위젯"인스턴스를 여러 개 돌릴 수 있습니다. 이러한 인스턴스 중 하나는 필요?

ServiceHost와 해당 호스트 서비스 클래스 간에는 일반적으로 1 : 1 관계가 없으며 적어도 1 : 1 관계에 의존 할 수는 없습니다. 나는 ServiceHost 인스턴스가 주어지면 (또는 여러개의) 서비스 클래스 인스턴스를 얻는 방법을 알지 못한다.

디자인을 조금 재고하고 다른 방식으로이 요구 사항을 해결할 방법을 찾아야 할 것으로 생각됩니다. 지금 WCF에서 당신이하려는 일을 할 수 있다고 생각하지 않습니다.

+0

감사합니다. 리팩토링가는 것 같아요. 이 코드는 Remoting을 사용하고 호스트와 클라이언트간에 공통적 인 별도의 라이브러리를 사용하는 레거시 코드입니다. 호스트는 이벤트에 대한 공통 객체를 '청취'했습니다. 공용 라이브러리에 인터페이스를 유지하고 해당 클래스의 구현을 공용 라이브러리에서 호스트 코드로 옮깁니다. – Jayden

관련 문제