2012-05-24 66 views
1

問題:我有一個WCF服務,它通過反射調用方法併發送結果。像這樣:WCF發送對象[]而不添加KnownTypeAttributes

[OperationContract] Object InvokeMemberByReflection(string typeName, string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args);

我這樣做,因爲我有我想要調用現有的API X。我不想爲所有方法編寫包裝。

我也不使用顯式DataContracts,因爲服務器和客戶端都引用相同的一組dll。

然而,對於上面的InvokeMemberByReflection方法中,由於我送方法參數類型的對象的陣列,它看起來像我必須添加API X的所有可能的方法簽名作爲用於KnownTypeAttributes DataContractSerializer的工作。

有沒有解決這個問題的方法? CLR基本上知道包含在對象數組中的元素的類型。它可以不基於此序列化/反序列化(授予它是一個不同的類型)?

此外,我將不勝感激任何其他模式解決這樣的問題。由於顯而易見的原因,反射太慢。

+0

你在訪問什麼類型的API,在沒有任何抽象的情況下將它的所有方法封裝在(重)Web服務調用中可能有意義? –

+0

這是一個測試API,因此性能不是問題。 – Kakira

+0

那你爲什麼要使用網絡服務? –

回答

2

如果客戶端和服務器使用相同的DLL(即類型完全相同),則可以使用NetDataContractSerializer,它不需要已知類型屬性(它會在發生CLR類型信息時發出序列化)。 This post有關於如何使用該序列化程序的示例。

+0

運行好啊!這工作,謝謝! – Kakira