2009-12-29 16 views
7

Estoy usando el servicio WCF en mi aplicación. Necesito devolver un objeto personalizado en la clase de servicio. El método es el siguiente:Servicio WCF: devolución de objetos personalizados

IService.cs: 
[OperationContract] 
object GetObject(); 

Service.cs 
public object GetObject() 
{ 
    object NewObject = "Test"; 
    return NewObject; 
} 

Cada vez que hago una llamada al servicio, se produce una excepción con el siguiente mensaje:

System.ServiceModel.CommunicationException: "An error occured while receiving the HTTP response to <service path>" 

excepción interna:

System.Net.WebException: "The underlying connection was closed. An unexpected error occured on receive" 

Puede ¿Devolvemos tipos de objetos u objetos personalizados desde el servicio WCF?

+0

¿dónde aloja su servicio wcf? –

Respuesta

13

Usted debe devolver una instancia de una clase que está marcado con el atributo DataContract:

[DataContract] 
public class MyClass 
{ 
    [DataMember] 
    public string MyString {get; set;} 
} 

Ahora cambiar su interfaz de servicio, así:

[OperationContract]  
MyClass GetMyClass(); 

Y su servicio:

public MyClass GetMyClass()  
{  
    return new MyClass{MyString = "Test"};  
} 
1

Debe devolver un tipo específico, no "objeto". Un "objeto" podría ser de cualquier tipo.

+0

aunque estoy de acuerdo en que este es un diseño deficiente, creo que WCF debería poder manejar el objeto – Steve

+2

"objeto" es un comodín. Significa que podrías devolver cualquier cosa. Tendrá que decirle a WCF qué tipo de cosas podría estar devolviendo, utilizando el 'ServiceKnownTypeAttribute'. –

0

Los objetos personalizados están bien, mientras que MS dice que ya no tiene que usar los atributos [DataContract] o [datamember], no he tenido éxito sin ellos. Intenta marcar tu objeto personalizado con los atributos y ver qué está sucediendo. Puede obtener más información sobre lo que está sucediendo explícitamente al activar el rastreo y usar svcutil para obtener el seguimiento.

Cuestiones relacionadas