簡體   English   中英

如何攔截WCF類的創建

[英]How to intercept WCF class creation

我有一個wcf服務,但我沒有使用它的服務參考。 客戶端服務器參考都在dll中定義了類和接口。 與服務器的通信使用從ClientBase派生的類。

我想在客戶端攔截wcf的默認對象創建,以便我可以提供實現INotifyPropertyChanged(由城堡動態代理創建)的子類型。

基本上, NHibernate返回只為wcf 實現INotifyPropertyChanged的類的想法相同。

我不太了解您要做什么-您想將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中編寫和處理消息檢查器的博客文章:

您是在談論攔截ChannelFactory的CreateChannel旋轉的對象嗎?

您可以覆蓋BaseChannelFactory並修改它返回的ClientBase對象嗎?

Microsoft的SVCUTIL.EXE可以使用正確實現的INotifyPropertyChanged自動生成您的代理數據類。 查看enableDataBinding參數。 這並不完全是您的要求,但無論如何都可以解決您的需求。

看看Castle WCF設施。 我很確定您可以擴展它以添加INotifyPropertyChanged。 該設施使用DynamicProxy生成代理。

http://www.castleproject.org/container/facilities/trunk/wcf/index.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM