我有一個使用WCF的應用程序。它在Ubuntu上的Mono 2.8.2和Windows上的.NET 3.0上運行良好。Mono 2.10/MonoTouch 4.0中的WCF KnownTypes
它裝飾用「ServiceKnownType」屬性WCF服務合同,這點在返回到使用服務器所需的派生類型的方法:
[ServiceKnownType("GetKnownTypes", typeof(KnownTypeProvider)]
我端起我的應用程序的MonoTouch。我使用最新的4.0,基於Mono 2.10.1。這不再起作用:我的WCF調用失敗,因爲客戶端上的DataContractSerializer不能識別返回類型。
我在我的'GetKnownTypes'方法中設置了一個斷點,並且發現它永遠不會被調用。我假設System.ServiceModel的這部分不存在/在MonoTouch中不起作用?
我嘗試通過使用'KnownType'屬性修飾基本返回類型來解決此問題。
[KnownType("GetKnownTypes")]
再一次,它不起作用,我的'GetKnownTypes'方法永遠不會被調用。查看DataContractSerializer的源代碼,看起來如果您使用方法名稱而不是指定類型,它會被忽略?
我將通過指定類型,而不是使用方法再試一次(看着DataContractSerializer的來源,它看起來像這樣將工作),但是這是在MonoTouch的棘手適合我,因爲我需要使用typeof運算而不是Type.GetType(「fully.qualified.typename」)。
有沒有另一種解決方案?解決方法?
我沒有看到這一點:How do you configure WCF known types programmatically?,但它似乎MonoTouch中缺少一些所需的界面...
在此先感謝
ServiceKnownType問題已確認爲Mono中的錯誤並已解決:https://github.com/mono/mono/commit/77758013 – TheNextman 2011-04-14 11:10:18