Silverlight 银光4号及;WCF反序列化问题-反序列化类型为';T';。意外的文件结尾

Silverlight 银光4号及;WCF反序列化问题-反序列化类型为';T';。意外的文件结尾,silverlight,wcf,deserialization,Silverlight,Wcf,Deserialization,我遇到了一个大问题,当我将Silverlight和Web项目分别升级到版本4时,这个问题突然暴露出来 执行此操作后,我的所有WCF服务都失败,并显示以下错误消息: 反序列化Anyboat.Admin.UserService.User类型的对象时出错。意外的文件结尾。以下元素未关闭:LastName、AuthenticateUserResult、AuthenticateUserResponse、Body、信封。 堆栈跟踪是: at System.ServiceModel.Dispatcher

我遇到了一个大问题,当我将Silverlight和Web项目分别升级到版本4时,这个问题突然暴露出来

执行此操作后,我的所有WCF服务都失败,并显示以下错误消息:

反序列化Anyboat.Admin.UserService.User类型的对象时出错。意外的文件结尾。以下元素未关闭:LastName、AuthenticateUserResult、AuthenticateUserResponse、Body、信封。

堆栈跟踪是:

   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)
我在响应消息的SilverlightFaultBehavior中设置了一个断点,这是我得到的信封响应。请注意介于*“\r\n”之间的回车符*


您在服务端使用哪种序列化类型?我很确定您使用了一些自定义序列化“\r\n”这个问题很常见,当您试图对从服务接收到的格式不正确的xml进行反序列化时,就会出现这个问题。
因此,我认为有两种方式:

  • 最好的方法。检查服务端的序列化程序。很明显,服务以错误的格式返回xml
  • 在反序列化之前,将特殊符号添加到客户端并从响应中删除
    谢谢你。这帮了我的忙,结果是问题与通过CustomBindingBehavior传输的对象有关,因此我使用了basicHttpBinding行为,并解决了它。
    "<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>robbie@robbietapping.com.au</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>"
    
     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;
                }