2011-04-13 52 views
0

我有一個使用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中缺少一些所需的界面...

在此先感謝

回答

1

它看起來像牢固無論是在MonoTouch的或錯誤的單聲道迴歸(我沒有的環境中單2.10測試在桌面上現在)

通過重組我的項目和使用

[KnownType(typeof(MyDerivedType))] 
工作圍繞問題

在基礎類型上。這在MonoTouch 4.0上運行得很好。

+1

ServiceKnownType問題已確認爲Mono中的錯誤並已解決:https://github.com/mono/mono/commit/77758013 – TheNextman 2011-04-14 11:10:18