J'ai rencontré un problème en essayant de retourner un objet qui contient une collection de childobjects qui peuvent à nouveau contenir une collection d'objets petits-enfants. Je reçois une erreur, "connexion forcée fermée par l'hôte".Types de données complexes dans WCF?
Y at-il un moyen de faire ce travail? J'ai actuellement une structure qui ressemble à ceci:
code pseudo:
Person:
IEnumerable<Order>
Order:
IEnumerable<OrderLine>
Tous les trois objets ont l'attribut DataContract et toutes les propriétés publiques que je veux Exposed (y compris le IEnumerable de) ont l'attribut DataMember.
J'ai plusieurs OperationContract sur mon service et toutes les méthodes retournant un seul objet OU un IEnumerable d'un objet fonctionnent parfaitement. C'est seulement quand j'essaie d'imbriquer IEnumerable que ça tourne mal. Aussi dans ma référence de service client j'ai choisi la liste générique comme type de collection. Je veux juste souligner, seulement une de mes opérations/méthodes échouent avec cette erreur - le reste d'entre eux fonctionne parfaitement.
EDIT (description plus détaillée d'erreur):
[SocketException (0x2746): An existing connection was forcibly closed by
the remote host]
[IOException: Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.]
[WebException: The underlying connection was closed: An unexpected
error occurred on a receive.]
[CommunicationException: An error occurred while receiving the HTTP
response to http://myservice.mydomain.dk/MyService.svc. This could
be due to the service endpoint binding not using the HTTP protocol.
This could also be due to an HTTP request context being aborted by
the server (possibly due to the service shutting down). See server
logs for more details.]
J'ai essayé la recherche de journaux, mais je ne trouve pas ... Je suis aussi l'aide d'un WSHttpBinding et un point de terminaison http.
Y a-t-il quelque chose dans vos objets qui n'est pas sérialisé correctement? –
Je ne sais pas. Je pensais peut-être qu'un IEnumberable imbriqué pourrait ne pas être sérialisé? Mais comment puis-je savoir? Je peux déboguer jusqu'au retour de l'OperationContract et tout va bien, mais le transport semble aller mal. Je n'ai pas d'attribut Serialize mais utilise plutôt [DataMember] –
Je suis confronté à la même erreur que vous .. mes classes sont également définies avec des propriétés enum, mais je ne vois pas cela comme un problème n'importe où .. enums devrait être bien .. et que voulez-vous dire en définissant la valeur par défaut? ils sont des types de valeur, donc ils ont toujours une valeur par défaut.Je vais essayer de supprimer les propriétés enum et voir si cela résout .. voici quelques informations sur les classes de contrat de données prises en charge http://msdn.microsoft.com/en-us/library/ms731923.aspx –