Question

Im getting a
Type 'WcfServiceLibrary1.GetDataErrorException' cannot be ISerializable and have DataContractAttribute attribute.

When trying to add a custom exception in a WCF service.

 [ServiceContract]
public interface IService1 {

    [OperationContract]
    [FaultContract(typeof(GetDataErrorException))]
    string GetData(int value);
}

public class Service1 : IService1 {
    public string GetData(int value) {
        if (value.Equals(0))
            throw new FaultException<GetDataError>(new GetDataError(), new FaultReason("Zero"));

        return string.Format("You entered: {0}", value);
    }
}

[DataContract]
public class GetDataError {
    public GetDataError() { }
}

[DataContract]
public class GetDataErrorException : FaultException<GetDataError> {
    public GetDataErrorException(string message) :
        base(new GetDataError(), new FaultReason(message)) { }
}

Why does this not work? Im missing something simple I guess...

Was it helpful?

Solution 2

I used the example in msdn faultexception example and that worked for me.

OTHER TIPS

You cannot and should not have both. as the That's evident from the exception you got. The framework sees an ambiguous state when it sees 2 serializers. for more info refer to the following blog

http://blogs.msdn.com/b/sowmy/archive/2006/05/14/597476.aspx

your Fault Contract should look like

public class DataErrorException : FaultException<GetDataError> 
{
    public DataErrorException(string message) :
            base(new GetDataError(), new FaultReason(message)) { }
}

Note that the only change here is that I have removed the DataContract attribute

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top