2010-10-04 3 views
0

J'utilise le service WCF pour implémenter mon service web J'ai un problème lorsque j'essaie d'appeler ma fonction qui prend l'URL comme paramètre d'entrée et renvoie une classe d'objets qui a été définie par moi. J'ai inclus toutes les classes définies par moi dans le DataContract comme je l'ai fait dans la classe ci-dessus. J'obtiens l'erreur ci-dessous mentionnée quand j'essaye de renvoyer ClassWS mais n'ai aucune erreur avec le retour Magasin [] ou adresse []Contrat de données pour une classe dont les champs sont des classes définies par l'utilisateur

Je reçois l'erreur. L'erreur n'est pas renvoyée dans le code de service, mais se produit lorsque la nouvelle valeur est renvoyée au proxy.

La connexion sous-jacente a été fermée: La connexion a été fermée de façon inattendue . trace de pile du serveur:
à System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException WebException, HttpWebRequest demande, HttpAbortReason abortReason) à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout) à System.ServiceModel.Channels.RequestChannel.Request (message message, délai d'attente TimeSpan) à System.ServiceModel.Dispatcher.RequestChannelBinder.Request (message message , délai d'attente TimeSpan) à System.ServiceModel.Channels.ServiceChannel.Call (String action, Boolean oneway, opération de ProxyOperationRuntime, Object [] ins, Object [] out, délai d'attente TimeSpan ) à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, opération ProxyOperationRuntime ) à System.ServiceModel.Channels.ServiceChannelProxy.Invoke (Message IMessage ) Exception relancée à [0]:
à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) à System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData MsgData, type Int32) à l'adresse IFindStore.My_Stores (URL de chaîne) à FindStoreClient.My_Stores (URL de chaîne) Exception interne: La connexion sous-jacente a été fermée: La connexion a été fermée de façon inattendue. à System.Net.HttpWebRequest.GetResponse() à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan timeout )

Je voudrais savoir comment obtenir un DataContract pour une classe qui a d'autres classes que leurs champs.

Dois-je écrire l'objet dans un flux à l'aide de datacontrerserialzer (même si data-contract utilise datacontractserializer). Dois-je utiliser XmlSerializer?

Merci à l'avance

Répondre

2

En général, aussi longtemps que vous avez DataContract + DataMembers pour toutes les classes pertinentes qui vous semblent déjà avoir, c'est tout ce qui est nécessaire pour DataContractSerializer les sérialisation.

Voici

The underlying connection was closed: The connection was closed unexpectedly. 
Server stack trace: at System.ServiceModel.Channels.HttpChannelUtilities. 
ProcessGetResponseWebException (WebException ..... 

est une exception générique que vous généralement voir s'il y a une exception non gérée dans votre service qui est à l'origine de la connexion à distance à fermer.

Ce n'est pas nécessairement quelque chose à voir avec la sérialisation de vos classes.

Je vous suggère d'entrer dans votre méthode de service pendant le débogage car cela vous dira exactement quelle exception est lancée et pourquoi!

+0

Le service n'a causé aucune erreur, il a renvoyé la bonne réponse. l'erreur se produit après le dernier "}" de la méthode. Je pense qu'il a une violation du contrat quand il lie la valeur de retour à la procuration. L'erreur se produit même Si je retourne juste de nouveaux ClassWS, public ClassWS My_Stores (String URL) { essayez { { } return new ClassWS(); catch (Exception ex) {} } – vasanth

+0

@vasanth - En supposant que votre service fonctionne, est-il possible que votre contrat de service ait changé récemment mais que le proxy client ne soit pas mis à jour? Peut-être que vous pouvez essayer de rafraîchir votre référence de service en faisant un "Update Service Reference" juste pour être sûr? Ce genre d'erreur est très possible dans ce genre de scénario? Cela aussi devrait être possible de déboguer en entrant dans la classe proxy? – InSane

+0

@InSane L'erreur a prévalu même lorsque j'ai mis à jour la référence de service et que j'ai essayé le client de test WCF dans VS2010. Il a la même erreur lorsque j'essaie d'appeler le service dans le client de test WCF. – vasanth

Questions connexes