2011-04-30 2 views
0

Je suis tombé sur un gros problème que j'ai rencontré qui a soudainement été mis au jour lorsque j'ai mis mes projets Web Silverlight & à la version 4 respectivement.Silverlight 4 & WCF Deseralizing Issue - Une erreur s'est produite lors de la désérialisation de l'objet de type 'T'. Fin inattendue du fichier

Depuis cette façon, tous mes services WCF ne parviennent pas avec le message d'erreur suivant:

Il y avait une erreur désérialisation l'objet de type Anyboat.Admin.UserService.User. Fin de fichier inattendue. Les éléments suivants ne sont pas fermés: LastName, AuthenticateUserResult, AuthenticateUserResponse, Body, Envelope.

Le StackTrace est:

at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest) 
    at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest) 
    at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest) 
    at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc& rpc) 
    at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) 
    at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result) 
    at Anyboat.Admin.UserService.UserServiceClient.UserServiceClientChannel.EndAuthenticateUser(IAsyncResult result) 
    at Anyboat.Admin.UserService.UserServiceClient.Anyboat.Admin.UserService.UserService.EndAuthenticateUser(IAsyncResult result) 
    at Anyboat.Admin.UserService.UserServiceClient.OnEndAuthenticateUser(IAsyncResult result) 
    at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result) 

Je mis un point d'arrêt dans mon SilverlightFaultBehaviour sur la réponse du message et c'est l'enveloppe Reponse je suis rentré. Notez le retour chariot qui est entre * « \ r \ n » *

"<s:Envelope xmlns:a=\"http://www.w3.org/2005/08/addressing\" xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\">\r\n <s:Header>\r\n <a:Action s:mustUnderstand=\"1\">urn:UserService/AuthenticateUserResponse</a:Action>\r\n <a:RelatesTo>urn:uuid:07cc1361-c74c-4449-b423-e982d2ac8e05</a:RelatesTo>\r\n </s:Header>\r\n <s:Body>\r\n <AuthenticateUserResponse>\r\n  <AuthenticateUserResult xmlns:d4p1=\"http://schemas.datacontract.org/2004/07/AnyBoat.Web.Classes.DataObjects\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n  <d4p1:Active>true</d4p1:Active>\r\n  <d4p1:EmailAddress>[email protected]</d4p1:EmailAddress>\r\n  <d4p1:FirstName>Robbie</d4p1:FirstName>\r\n  <d4p1:IsAdministrator i:nil=\"true\" />\r\n  <d4p1:LastName>Tapping</d4p1:LastName>\r\n  <d4p1:Password>xxxxxxxxx</d4p1:Password>\r\n  <d4p1:UserID>2</d4p1:UserID>\r\n  <d4p1:UserName>robbietapping</d4p1:UserName>\r\n  </AuthenticateUserResult>\r\n </AuthenticateUserR 
esponse>\r\n </s:Body>\r\n</s:Envelope>" 

Quelqu'un peut-il me dire s'il se trouve autour du tout, je mis à jour mon VS2010 SP1 où cela a commencé à se montrer .

Toute information ou réponse serait grandement appréciée.

Merci

EDIT

Le code que l'erreur sur est:

public Anyboat.Admin.UserService.User EndAuthenticateUser(System.IAsyncResult result) { 
       object[] _args = new object[0]; 
       Anyboat.Admin.UserService.User _result = ((Anyboat.Admin.UserService.User)(base.EndInvoke("AuthenticateUser", _args, result))); 
       return _result; 
      } 

Répondre

1

Quel type sérialisation utilisez-vous à côté des services? Je suis sûr que vous utilisez une sérialisation personnalisée. "\ r \ n" problème est assez commun et il se produit lorsque vous essayez de désérialiser xml pas bien formé reçu du service.
Je vois deux façons:

  1. La façon la plus préférable. Vérifiez le sérialiseur au niveau du service. Il est évident que le service renvoie xml dans un format incorrect.
  2. Ajoutez IClientMessageInspector au client et supprimez les symboles spéciaux de la réponse avant la désérialisation.
+0

Merci pour votre inscription. Cela m'a aidé, cela a fonctionné étant que le problème était lié à l'objet transféré sur un CustomBindingBehaviour, donc j'ai utilisé un comportement basicHttpBinding à la place et cela l'a corrigé. –

Questions connexes