2009-11-30 2 views
0

서비스 참조를 사용하지 않는 wcf 서비스가 있습니다. 클래스와 인터페이스는 클라이언트 서버 참조 모두에서 정의됩니다. 서버와의 통신은 ClientBase에서 파생 된 클래스를 사용합니다.WCF 클래스 생성을 가로 채는 방법

클라이언트 측에서 wcf의 기본 객체 생성을 가로 채기 때문에 INtifyPropertyChanged (성 동적 프록시에 의해 생성 됨)를 구현하는 하위 유형을 제공 할 수 있습니다.

기본적으로 wcf에 대해서만 NHibernate returning a class implementing INotifyPropertyChanged 뒤에 동일한 아이디어가 있습니다.

답변

1

서버에서 클라이언트로 POCO를 보내려고합니다. 즉, POCO 클래스를 만들고 [DataContract]로 꾸미고 데코 레이팅해야합니다. [DataMember]로 연재하기를 원하는 회원.

클라이언트 측에서는 직렬화 된 와이어 형식이 동일한 클라이언트 측 프록시 클래스가 생성되지만 WCF는 XML 스키마를 가장 낮은 공통 분모로 직렬화하므로 인터페이스 등의 물건을 보낼 수 없습니다 on - only 구체적인 인스턴스 클래스. 그리고 클라이언트에서 동일한 "모양과 느낌"(및 직렬화 형식)을 가진 서버와 동일한 클래스를 얻지 못합니다.

그래서 어떻게 그리고 어디서 연결하고 싶지는 않습니다. 당신이 할 수있는

한 가지

public interface IClientMessageInspector 
{ 
    void AfterReceiveReply(ref Message reply, object correlationState); 
    object BeforeSendRequest(ref Message request, IClientChannel channel); 
} 
은 "AfterReceiveReply"이벤트를 잡을 것

을 기반으로 클라이언트 측 메시지 관리자를 생성하고, 다음 직렬화 POCO 클래스는 와이어를 통해 오는 걸릴 것입니다, INotifyPropertyChanged 핸들러를 구현하는 다른 클래스로 변환하십시오.

작성하고 WCF의 메시지 사찰을 처리하는 방법에 대한 몇 가지 블로그 게시물을 참조하십시오 :

0

당신은 객체가 차단 대해 이야기를 CreateChannel ChannelFactory의 스핀 업이 가능합니까?

BaseChannelFactory를 재정의하고 반환하는 ClientBase 객체를 수정할 수 있습니까?

0

Microsoft의 SVCUTIL.EXE은 올바르게 구현 된 INotifyPropertyChanged를 사용하여 프록시 데이터 클래스를 자동으로 생성 할 수 있습니다. enableDataBinding 매개 변수를 확인하십시오. 그것은 당신이 요구하는 것이 아니지만 어쨌든 귀하의 필요를 해결할 수 있습니다.

관련 문제