2009-12-29 2 views
7

J'utilise le service WCF dans mon application. Je dois retourner un objet personnalisé dans la classe de service. La méthode est la suivante:Service WCF: renvoi d'objets personnalisés

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

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

Chaque fois que je fais un appel au service, elle émet une exception avec le message suivant:

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

Exception interne:

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

Can Ne retournons-nous pas les types d'objets ou les objets personnalisés du service WCF?

+0

Où hébergez-vous votre service wcf? –

Répondre

13

Vous devez retourner une instance d'une classe qui est marquée par l'DataContract attribut:

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

changer maintenant votre interface de service comme ceci:

[OperationContract]  
MyClass GetMyClass(); 

Et votre service:

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

Vous devriez retourner un type spécifique, pas un "objet". Un "objet" pourrait être de n'importe quel type.

+0

alors que je suis d'accord que c'est une mauvaise conception, je pense que WCF devrait être capable de gérer l'objet – Steve

+2

"objet" est un caractère générique. Cela signifie que vous pourriez retourner n'importe quoi. Vous devrez indiquer à WCF quelles sortes de choses vous pourriez retourner, en utilisant 'ServiceKnownTypeAttribute'. –

0

Les objets personnalisés sont très bien, alors que MS dit que vous n'avez plus besoin d'utiliser les attributs [DataContract] ou [datamember], je n'ai pas réussi sans eux. Essayez de marquer votre objet personnalisé avec les attributs et de voir ce qui se passe. Vous pouvez obtenir plus d'informations sur ce qui se passe explicitement en activant le traçage et en utilisant svcutil pour obtenir la trace.