2012-11-30 41 views
0

因此,我通過WCF發送實體。我想要做的是有機會以任何我想要的方式改變實體,然後再繼續。我不必在WCF中這樣做,但我沒有看到另一個地方去做,因爲我希望有一個地方可以做到這一點。我可以在通過WCF之前提取一個通過WCF的對象,以便我可以先操作它

開放的建議雖然如果任何人有另一種方式來做到這一點:)

我有DAL,域和服務通常的層。他們也都共享一個共同的。

回答

2

我認爲你是在談論Message Inspectors

消息檢查是可以在 服務模式的客戶端運行時和調度運行時使用編程方式通過配置 或並且可以檢查和更改消息的擴展性對象在 之後他們被收到或在他們被髮送之前。

此示例實現了基本客戶端和服務消息驗證 機制,該機制根據一組可配置的XML Schema文檔驗證傳入消息。請注意,此示例不會爲每個操作驗證消息 。這是一種故意的簡化。

也看看到IParameterInspector,在這裏你可以處理所有的輸入/輸出參數在客戶端和服務器端

+0

謝謝,我會讀的鏈接! – Shumii

+0

是的,這看起來不錯...但我對如何獲取我發送的對象毫無頭緒。我需要看消息內容並反序列化嗎?我也看過行爲,但卻被同樣的問題困擾着。 – Shumii

+1

是的,你將不得不反序列化裏面的消息,你想用這個對象做什麼? –

2

我不知道如果我明白你問正確的,但我給它一試。

我認爲你可能在尋找Data Transfer Objects(DTO)。您可以在將實體發送到服務之前將所有實體所需的數據放入DTO中。該服務然後處理所包含的數據並將另一個DTO發送回您的客戶端。

這樣,您就可以完全控制DTO的結構以及您的服務和客戶端真正需要的數據類型。

+0

你是一種準確。但我希望它自動發生在任何實體上。 – Shumii

+0

@shumii然後讓你的DTO實現一個接口並循環遍歷結果並在返回它們之前調用接口 – cordialgerm

+0

@pickles你能更具體嗎?你在哪裏做循環,你究竟是什麼意思「調用」的界面?感謝評論 - 我只是不確定你明白我想達到什麼。 – Shumii

1

擴展在仁H公司的回答是:

檢查的消息和處理的反序列化的
已經系列化結果的開銷您檢索數據庫和之前的結果後,你可以只執行您的自定義邏輯,而不是你將它們返回給客戶端。這樣做的一種方法如下所示

public interface IDataTransferObject 
{ 
     void CustomizeMeSomehow(); 
} 

[DataContract] 
public class MyDataTransferObject : IDataTransferObject 
{ 
    public void CustomizeMeSomehow() 
    { 
      //Your custom logic here.. 
    } 
} 

public class MyService 
{ 
     public List<MyDataTransferObject> GetObjects() 
     { 
      List<MyDataTransferObjects> items = Repository.RetrieveResults(); 

      foreach (var item in items) 
       item.CustomizeMeSomehow(); 

      return items; 
     } 
} 
+0

我看到這將適用於返回特定對象的特定服務。但是任何返回任何對象的服務呢? – Shumii

+0

@Shumii - 你必須提供更多關於你想要做什麼的信息,但是你應該能夠將這種類型的代碼放入工具類 – cordialgerm

+0

本質上,我希望我的開發人員無需編寫任何代碼即可獲得附加信息額外的代碼。我不希望他們有意識地做任何事情來獲得附加信息(附加信息是我的自定義信息)。他們會按照正常的方式進行編碼,並從服務調用中獲得他們所需的內容,並自動獲得額外的字段。在我與ArsenMkrt的討論中閱讀以上評論。我仍在研究該解決方案,但反序列化,序列化和反射開銷是一個問題。 – Shumii

相關問題