In order to pass Enum values around to your WCF service operations, then you must put [ServiceKnownType(typeof(Enum))] attribute on the service interface contract, and also add the [EnumMember] attribute to every enum value within your Enumeration data contract.
Service contract looks like this...
namespace MyNameSpace.ServiceContracts
{
[ServiceContract(Namespace = "http://MyNameSpace.ServiceContracts/2007/04", Name = "IReferenceData", SessionMode = SessionMode.Allowed)]
[ServiceKnownType(typeof(ReferenceTypeData))]
public interface IReferenceData
{
[OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "LookupReferenceData")]
[FaultContract(typeof(Exception))]
MyNameSpace.DataContracts.ReferenceValueCollectionData LookupReferenceData(MyNameSpace.DataContracts.ReferenceTypeData request);
}
}
Enum looks like this...
namespace MyNameSpace.DataContracts
{
/// <summary>
/// Data Contract Class - ReferenceTypeData
/// </summary>
[DataContract(Namespace = "http://MyNameSpace.DataContracts/2007/04", Name = "ReferenceTypeData")]
public enum ReferenceTypeData
{
[EnumMember()]
Unknown = 0,
[EnumMember()]
Title = 1,
[EnumMember()]
Nationality = 2
}
}