2011-08-03 11 views
6

Aquí está la firma del método en el servicio WCF:objeto WCF Lista Serializado dar nombres extraños para los objetos

APIMessageList<APISimpleContact> GetMembers(string apiKey, APIContactSearchFilter filter); 


APIMessageList hereda de IList. Una vez que haya creado un proxy en este servicio WCF, el nombre de clase es APIMessageListOfAPISimpleContactjHldnYZV.

¿Por qué no sale: APIMessageListOfAPISimpleContact?

Agrega texto aleatorio al final de cada objeto APIMessageList en la interfaz (hay varios) Todos terminan con los mismos caracteres: jHldnYZV. He buscado en línea posibles causas, pero no puedo encontrar publicaciones de personas que tengan este problema.

Esto es un problema puramente estético, pero esta interfaz está expuesta a nuestros clientes externos por lo que su apariencia es importante.

¿Alguien sabe por qué estoy recibiendo este problema?

Muchas gracias
Joe

+0

¿Puede usted por favor publicar el atributo contrato de operación del contrato de servicio? –

Respuesta

0

Hemos tenido un problema similar durante el uso de tipos genéricos para los valores de retorno. Si no especificamos un tipo concreto, el serializador de contrato de datos predeterminado o el serializador WCF no pueden inferir el tipo exacto de la entidad devuelta. Por lo tanto, genera un nombre de clase aleatorio para el tipo devuelto.

En nuestro proyecto superamos este problema creando un contrato de datos que era de tipo específico y se devolvió igual como resultado de una llamada de operación WCF.

Supongo que está utilizando un tipo genérico y el serializador no puede inferir el tipo del objeto devuelto.

Sugiero que cree un objeto de transferencia de datos (DTO) y lo devuelva del servicio WCF. Eso debería resolver tu problema.

+1

El ajuste de las reglas de serialización para genéricos se trata en el enlace que se proporciona en la respuesta de @carlosfigueira; solo debe darle una plantilla como tal; '[DataContract (Name = "Drawing_using_ {1} {0} _brush_and_ _shape")] public class Dibujo {// Código no se muestra. } ' – Shawson

+0

p. ¿Por qué el formato de código en los comentarios es tan basura en este sitio? – Shawson

7

Su solución será en http://msdn.microsoft.com/en-us/library/ms731045.aspx. Básicamente, dado que podría tener múltiples clases de "SimpleContract" (en diferentes espacios de nombres), WCF agregará un hash de desambiguación al final del nombre del contrato, que es lo que tiene en los 8 caracteres al final del nombre del contrato. Pero se puede controlar que, mediante el uso de la CollectionDataContract y su propiedad Name:

[CollectionDataContract(Name = "APIMessageListOfSimpleContract")] 
public class APIMessageList : IList<SimpleContract> { ... } 
Cuestiones relacionadas