2011-03-10 36 views
0

我正在開發一個使用服務方法的消息/響應模式公開WCF服務的應用程序。該應用程序使用Unity 2.0進行依賴項注入,並使用MS Patterns的驗證應用程序塊&實踐。我已經使用一個自定義的HttpModule綁定到WCF,我從幾個網站上拿回來,一切都很好。使用WCF,Unity和VAB驗證參數

在我服務的接口我有這樣的方法: DoSomethingResponse DoSomething的(DoSomethingRequest要求)

我可以很容易地連接VAB屬性的服務合同,以驗證「請求」永遠不能爲null,但我也想驗證請求對象的內容。

爲此,我將驗證器注入到DoSomethingRequest構造函數中,幷包含一個內部範圍的IsValid屬性,該屬性處理與VAB驗證器的交互。不幸的是,這個構造函數沒有被調用,因爲WCF反序列化了對象,並且沒有使用構造函數。沒有深入瞭解請求對象是一個簡單的DTO還是具有一些服務器端業務邏輯的優點,有沒有辦法將依賴關係乾淨地注入傳入WCF服務的對象作爲參數?

回答

0

所以事實證明,將驗證屬性添加到我的DataContract實際上沒有額外的代碼。不幸的是,如果驗證是在應用程序的配置文件(app.config或web.config)中定義的,則它不起作用。

因此,我在我的DataContract(請求對象)上剝離了構造函數注入和IsValid屬性,這使得它更多地是我認爲首選的註釋DTO。我只希望它能和XML配置一樣。

0

如果我正確理解你的問題,你有DoSomethingRequest屬性是其他類的實例(數據契約),你也想驗證你的數據契約?是否有某些原因,您不能僅將驗證屬性應用於您的數據合同類?這是我在使用WCF和VAB集成時使用的方法,它的運行非常好。

+0

不完全。 DoSomethingRequest是一個DataContract。我想在採取進一步行動之前驗證其DataMembers。實質上,在我的服務方法中,我調用request.IsValid來確定是否應執行請求的操作。 IsValid需要通常在構造函數中注入的驗證器實例。 – SonOfPirate 2011-03-10 17:38:34