При общении через WCF WCF должен точно знать, что будет отправлено через границу.Поэтому брать «Исключение» - это нормально, и все, но почти всегда вы будете передавать подтипы исключений, поэтому вам нужно указать контракту, какие типы исключений будут передаваться через границу.То же самое относится и к MethodBase.Возможно, вы захотите сообщить ему, что иногда будете передавать MethodInfo.
Поскольку это не ваши типы, вы, вероятно, не сможете использовать атрибут KnownType (атрибут обычно помещается вбазовый класс или интерфейс).В этом случае вам нужно использовать Средство обработки контрактов данных.Он сообщает механизму сериализации / десериализации, как найти подтипы.
http://msdn.microsoft.com/en-us/library/ee358759.aspx
Хотя вы можете использовать атрибут ServiceKnownType.Ваш контракт должен выглядеть примерно так:
[DataContract]
public interface ILoggingStuff // choose a better name than this
{
[OperationContract]
[ServiceKnownType(typeof(MethodInfo))]
int LogException(MethodBase methodBase, Exception exception);
[OperationContract]
[ServiceKnownType(typeof(MethodInfo))]
int LogMessage(MethodBase methodBase, string message, string data);
}
Это говорит WCF, что MethodBase может использовать нисходящий Type MethodInfo.