Pregunta

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...

¿Fue útil?

Solución 2

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

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top