У меня есть приложение, которое использует WCF.Он отлично работает на Mono 2.8.2 в Ubuntu и .NET 3.0 в Windows.
Он украшает контракт службы WCF атрибутом ServiceKnownType, который указывает на метод, возвращающий производные типы, необходимые для использования сервера.:
[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 («полностью.qualified.typename»).
Есть ли другое решение?Обходной путь?
Я действительно видел это: Как вы настраиваете известные типы WCF программно? , однако кажется, что в MonoTouch отсутствуют некоторые необходимые интерфейсы ...
Спасибозаранее