Если кто-то еще сталкивается с тем же исключением, с тем же поведением отладки до конца на сервере, но получая исключение при возврате клиенту, другой возможной причиной является неинициализированное перечисление в контракте на возврат данных, где enum имеет явные значения, но не имеет явного нулевого значения.
[ServiceContract]
public interfact IMyService
{
[OperationContract]
MyResult DoSomething();
}
[DataContract]
public class MyResult
{
[DataMember]
public OperationStatus Status {get; set;}
[DataMember]
public string ErrorText {get; set;}
}
[DataContract]
public enum Operation Status
{
[EnumMember]
Success = 1,
[EnumMember]
Failure = 2
}
public class MyService : IMyService
{
public MyResult DoSomething()
{
var result = new MyResult();
// ... do work, but don't set any properties on result ...
return result;
}
}
Причиной ошибки в этом сценарии является то, что result.Status по умолчанию равен нулю, но контракт данных не предоставляет никаких средств для его сериализации, поскольку он не является одним из явно определенных значений перечисления.
Решение (при условии, что вам действительно нужно это перечисление с явными целочисленными значениями) состоит в том, чтобы либо установить значение перечисления в возвращаемом объекте, либо предоставить значение по умолчанию (ноль).
[DataContract]
public enum Operation Status
{
[EnumMember]
Unknown = 0,
[EnumMember]
Success = 1,
[EnumMember]
Failure = 2
}
- Bill