Pregunta

Tengo una pregunta acerca de WCF.

He creado un servicio de WCF con un MSMQ extremo.Este servicio es expuesto por un Servicio de Windows y el servicio es consumido por un Asp.net aplicación.Mi Asp.net la aplicación utiliza un archivo DLL externo que contiene las clases y las enumeraciones (definido por eBay) que me gustaría utilizar en mi DataContract.No puedo modificar estas clases ni puedo agregar atributos.

Mi DataContract clase es como este:

[DataContract]
public class AddItemArgs
{
    [DataMember]
    public ItemType Item { get; set; }
}

Este ItemType de la clase definida en el archivo DLL externo.

El servicio se crea y compila y se invoca correctamente por el cliente pero...hay un error al registrar mi parámetro que utiliza una de las clases definidas en el archivo DLL.El error es como:

Sistema.En tiempo de ejecución.La serialización.SerializationException:Tipo de 'Sistema.DelegateSerializationHolder+DelegateEntry' con los datos de nombre del contrato 'eBay.Servicio.Núcleo.El jabón.BuyerPaymentMethodCodeType:BuyerPaymentMethodCodeType:http://schemas.datacontract.org/2004/07/eBay.Service.Core.Soap' no se espera.Añadir cualquier tipo no conocido de forma estática en la lista de conocidos tipos - por ejemplo, mediante el uso de la KnownTypeAttribute atributo o por añadir a la lista de tipos conocidos pasa a DataContractSerializer.

Este problema se verifica cuando se me pase el parámetro (BuyerPaymentMethodCodeType).Es esto porque BuyerPaymentMethodCodeType es un tipo de enumeración?Si yo no pase de un ItemType con ese campo, todo va bien.

¿Fue útil?

Solución

¿Has probado:

[DataContract]
[KnownType(typeof(BuyerPaymentMethodCodeType))]
public class AddItemArgs
{

}

Tan lejos como las enumeraciones de ir, he aquí algunas pautas sobre el uso de la EnumMemberAttribute

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