我遇到了一个问题,试图返回一个包含子对象集合的对象,这些对象又可以容纳一组孙对象.我收到一个错误,'连接被主机强行关闭'.
有没有办法让这项工作?我目前的结构类似于:
伪代码:
Person: IEnumerableOrder: IEnumerable
所有三个对象都具有DataContract属性,我想要公开的所有公共属性(包括IEnumerable)都具有DataMember属性.
我的服务上有多个OperationContract,所有返回单个对象的方法或对象的IEnumerable都可以正常工作.只有当我尝试嵌套IEnumerable时才会变坏.同样在我的客户服务参考中,我选择了通用列表作为我的集合类型.我只想强调一下,只有我的一个操作/方法因此错误而失败 - 其余的操作完美无缺.
编辑(更详细的错误描述):
[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.]
我试着寻找日志但我找不到任何...我也在使用WSHttpBinding和一个http端点.
需要注意的是,您需要了解如何使用WCF日志记录实用程序:
记录信息.
配置编辑器(简化设置).
跟踪查看器.非常棒.允许多个服务(客户端和服务器)跟踪并可以加入它们并帮助您分析所有详细信息.让您快速找到问题的根源.(因为当出现服务器WCF错误时,客户端不太可能获得有用的数据.)
好吧,我终于在我的案例中找到了真正的问题.看来露出枚举并不是世界上最伟大的事情.我要么必须在它们上设置默认值,要么将属性公开为int或我的枚举所基于的任何整数类型.
感谢您的帮助,您无法知道这一点 - 我在我的结构中找到了第3级的枚举,并逐个系统地删除了数据库,这是我发现的方式.看来我不是唯一遇到这个问题的人 - 这家伙显然有类似的问题:)
http://zianet.dk/blog/2007/11/24/serializing-enums-in-wcf/
如果您正在使用WCF +(EF + POCO),请尝试设置,
ObjectContext.ContextOptions.LazyLoadingEnabled = false; ObjectContext.ContextOptions.ProxyCreationEnabled = false;