WCF从服务中读取数据问题

Red*_*wan 2 wcf xml-serialization entity-framework-4.1

我想List<User>从我的Web服务到我的Web应用程序获取用户对象的通用列表.可能这是常见的问题.我搜索了很多,但每个链接都有不同的补救措施.所以最后我决定要求在这里破坏......反正

我正在使用控制台应用程序从托管的wcf Web服务中获取数据.我的WCf Web服务在哪里有Entity框架4.1.我正在使用其模型类中的对象.当我尝试将服务引用添加到我的Web应用程序时,它通常会在Web应用程序中生成代理.我能够发布数据意味着我可以创建用户.但是当getusers它返回List时,获得以下例外......:

例外:
接收到http://myserver/AdminService/MyAdminService.svc的HTTP响应时发生错误 .这可能是由于服务端点绑定不使用HTTP协议.这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭).请参阅服务器日志以获取更多详

内部异常是:
基础连接已关闭:接收上发生意外错误

内部内部异常是:无法从传输连接读取数据:远程主机强制关闭现有连接.

with message:远程主机
错误代码强制关闭现有连接:10054

事件日志说明:
未记录消息.
异常:System.ServiceModel.CommunicationException:尝试序列化参数http://tempuri.org/:getUsersResult时出错 .该消息的InnerException是"类型'System.Data.Entity.DynamicProxies.User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D’数据合同名称'User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D:HTTP://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies’预计不会.考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.有关更多详细信息,请参阅InnerException.---> System.Runtime.Serialization.SerializationException:键入'System.Data.Entity.DynamicProxies.User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D'数据合同名称"User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D:HTTP://schemas.datacontract.org/2004/07/System.Data.Entity .DynamicProxies'不是预期的.考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract,XmlWriterDelegator xmlWriter,Object obj,Boolean verifyKnownType,RuntimeTypeHandle declaredTypeHandle,Type declaredType)at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle objectTypeHandle,Type System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference中的System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter,Object obj,Boolean isDeclaredType,Boolean writeXsiType,Int32 declaredTypeID,RuntimeTypeHandle declaredTypeHandle)中的objectType,Int32 declaredTypeID,RuntimeTypeHandle declaredTypeHandle,Type declaredType) (WriteLrrayOfUserToXml中的XmlWriterDelegator xmlWriter,Object obj,Boolean isDeclaredType,Boolean writeXsiType,Int32 declaredTypeID,RuntimeTypeHandle declaredTypeHandle)(XmlWriter)系统中的System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter,Object obj,XmlObjectSerializerWriteContext context)中的Systemator,Object,XmlObjectSerializerWriteContext,CollectionDataContract),System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver) System.Runtime.Serialization.XmlObjectSerializer.WriteObject(XmlDictionaryWriter)中的System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver)中的.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver). System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart(XmlDictionaryWriter writer,PartInfo part,Object graph)---内部结束时的编写者,对象图)xception堆栈跟踪--- System.ServiceModel上的System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart(XmlDictionaryWriter writer,PartInfo part,Object graph),System.ServiceModel上的System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameter(XmlDictionaryWriter writer,PartInfo part,Object graph)系统中的System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage.OperationFormatterBodyWriter.OnWriteBodyContents(XmlDictionaryWriter writer)的.Dispatcher.DataContractSerializerOperationFormatter.SerializeBody(XmlDictionaryWriter writer,MessageVersion version,String action,MessageDescription messageDescription,Object returnValue,Object [] parameters,Boolean isRequest)系统中System.ServiceModel.Diagnostics.MessageLogTraceRecord.WriteTo(XmlWriter writer)的System.ServiceModel.Channels.Message.ToString(XmlDictionaryWriter writer)中的.ServiceModel.Channels.BodyWriter.WriteBodyContents(XmlDictionaryWriter writer)System.ServiceModel.Dessnostics中的System.ServiceModel.Diagnostics.MessageLogger.LogMessageImpl(Message&message,XmlReader reader,MessageLoggingSource source)中的.ServiceModel.Diagnostics.MessageLogger.LogInternal(MessageLogTraceRecord记录).消息和消息,XmlReader读取器,MessageLoggingSource来源)进程名称:w3wp进程ID:5928

应该是什么问题.我和团队从3天开始搜索这个.但遗憾的是到目前为止没有克服......

我尝试了很多东西,如添加序列化属性,端点修改...我无法回忆所有:) ...可能你可能给我们正确的方向...

Lad*_*nka 7

原因是默认情况下EF类在运行时代理以支持延迟加载和动态更改跟踪.所以你不要序列化User类,而是User在运行时派生类.WCF不喜欢这样.关闭上下文中的代理创建.

context.Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)