我有一個wcf服務,我沒有使用服務引用。 類和接口定義在客戶端服務器引用的dll中。 與服務器的通信使用從ClientBase派生的類。如何攔截創建WCF類
我想攔截wcf在客戶端創建的默認對象,以便我可以提供實現INotifyPropertyChanged(由城堡動態代理創建)的子類型。
在NHibernate returning a class implementing INotifyPropertyChanged後面基本上只有wcf。
我有一個wcf服務,我沒有使用服務引用。 類和接口定義在客戶端服務器引用的dll中。 與服務器的通信使用從ClientBase派生的類。如何攔截創建WCF類
我想攔截wcf在客戶端創建的默認對象,以便我可以提供實現INotifyPropertyChanged(由城堡動態代理創建)的子類型。
在NHibernate returning a class implementing INotifyPropertyChanged後面基本上只有wcf。
我不完全明白你要做什麼 - 你想從服務器發送一個POCO到客戶端:這意味着,你需要創建POCO類並將其裝飾爲[DataContract]並裝飾其想要使用[DataMember]序列化的成員。
在客戶端,您將得到一個客戶端代理類,它具有相同的序列化連線格式 - 但自從WCF使用XML模式作爲最低公共標準進行序列化後,您無法發送諸如接口之類的東西,因此只有具體的實例類。而在客戶端上,你不會獲得與服務器上相同的類 - 只是具有相同「外觀和感覺」(以及序列化格式)的類。
所以我真的不知道你想如何和在哪裏掛鉤。
有一兩件事你可以做的是建立一個基於
public interface IClientMessageInspector
{
void AfterReceiveReply(ref Message reply, object correlationState);
object BeforeSendRequest(ref Message request, IClientChannel channel);
}
會趕上「AfterReceiveReply」事件客戶端消息檢查,然後你會採取系列化POCO類跨線的到來,並將其轉換爲另一個也會實現INotifyPropertyChanged處理程序的類。
參見如何編寫和WCF處理郵件檢查員一些博客文章:
你說的是攔截的對象CreateChannel從你的ChannelFactory轉向了嗎?
你可以覆蓋BaseChannelFactory並修改它返回的ClientBase對象嗎?
微軟的SVCUTIL.EXE可以自動生成代理數據類,INotifyPropertyChanged正確實施。查看enableDataBinding參數。這不完全是你要求的,但可能無論如何可以解決你的需求。
看看城堡WCF設施。我很確定你可以擴展它來添加INotifyPropertyChanged。 該工具使用DynamicProxy生成代理。
http://www.castleproject.org/container/facilities/trunk/wcf/index.html