2011-04-04 45 views
0

我想使用通用DataContract類,這樣我就不必爲不同對象的集合實現幾種類型。Agatha WCF中的通用DataContract

經驗:

我有一個包含對象的集合配置文件對象。

所以我想有一個Profile<Foo>Profile<Foo1>其中配置文件包含Foo或Foo1對象的集合。

我一直在閱讀WCF不支持泛型類,實際上我得到的錯誤如下。

Type 'GL.RequestResponse.ProfileResponse 1 [T]'不能作爲模式類型導出,因爲它是一個開放的泛型類型。如果所有通用參數類型都是實際類型,則只能導出通用類型。'

現在ProfileResponse就是我正在嘗試使用的這個Profile對象。

現在在我的主機我正在做以下。 :

ServiceConfig(typeof(ProfileHandler<EducationResponse>).Assembly, 
       typeof(ProfileRequest).Assembly, 
       typeof(Container)).Initialize(); 

這是dhe定義與datacontract處理程序。

public class ProfileHandler<T> : RequestHandler<ProfileRequest, 
                ProfileResponse<T>> 

Container正在使用Windsor Container來註冊對象。

註冊工作正常,但在我實例化服務主機的WCF處理器,並調用主機的打開方法我得到上述錯誤。

真的沒有辦法讓我用agatha寫wcf的通用響應請求嗎? 感覺這樣的浪費必須爲該集合中包含的每種類型定義配置文件容器類。

謝謝。

回答

0

一個不能有開放的通用處理程序,因爲服務器端需要知道類型是什麼。 可以使用所謂的封閉泛型方法。這樣服務器端知道加載處理程序的類型。

此外,人們可以配置阿加莎,以便它可以接收與請求有關的額外信息。在這種情況下,它將是響應中包裝的類型。

可以通過定義一個BaseRequest類並讓所有的請求擴展這個類來做到這一點。這個類可以有一個屬性,該屬性採用響應的類型。或者在響應中包裝的類型。

在這個過程中,當檢查請求時,進程可以將類型封裝在Response中,以便我知道如何加載類。

我沒有實現這一點,因爲它會花費太多時間,我不確定我想要負責維護我們的應用程序的Agatha,但這是我該怎麼做的。