Frage

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

War es hilfreich?

Lösung 2

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

Andere Tipps

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top