【问题标题】:WCF WebHttp & Cycles Preventing SerializationWCF WebHttp & Cycles 防止序列化
【发布时间】:2011-09-19 04:15:19
【问题描述】:

我使用以下文章作为指导创建了 WCF WebHttp 服务..

http://blogs.msdn.com/b/endpoint/archive/2010/01/07/getting-started-with-wcf-webhttp-services-in-net-4.aspx

除了一个部分,我的一切都很好。当我查询从我的数据库中获取联系人列表时,它会很好地返回它们。但是,当我使用相同的代码结构来获取帐户列表时,它会告诉我:

此网页不可用

但是,我可以查询单个帐户没有问题。起初我认为这可能是一个依赖关系,它试图将所有子对象加载到 Account 等等。但是当我检查从数据库返回的结果时,它是一组非常小的数据。 (42条记录)所以我认为它可能与对象的序列化有关,所以我对文件做了我自己的小Json序列化器方法并得到以下错误。

“MyNamespace.Model.Account”类型的对象图包含循环,如果禁用引用跟踪,则无法序列化。

于是我在网络上进行了搜索,所有结果都指向一篇单篇文章..

http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx

但是,这篇文章对我没有帮助,因为它对 WCF WebHttp 服务无效。

有什么想法吗?

【问题讨论】:

    标签: wcf serialization webhttp


    【解决方案1】:

    该文章也适用于 WCF WebHttp 服务 - 您只需获取对这些服务的 ServiceHost 的引用。在该博客文章的示例中,服务正在使用 ASP.NET 路由和WebServiceHostFactory(创建该服务使用的ServiceHost 实例的组件)激活。

    因此您必须创建自己的工厂(可能会覆盖 WebServiceHostFactory),并在 CreateServiceHost 上调用基本方法来获取主机,根据 Sowmy 的文章对其进行修改,然后将其返回。

    我最近在http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/wcf-extensibility-servicehostfactory.aspx 上发布了一篇关于服务主机工厂的文章,您可以在其中找到有关此组件的更多信息。

    【讨论】:

    • 我现在正在尝试使用这种方法。但是,它看起来不支持我们正在使用的传输格式 JSON。我仍在尝试确定这是否可行,但如果您有更多建议,我可以使用它。
    • JSON 序列化不支持循环 - 您需要打破循环或选择其他序列化格式。
    • 我害怕那个。在阅读您的评论之前,我得出了相同的结论,但我不想相信。我还是不想相信,但我想我别无选择。你对如何打破循环有什么建议吗?更改数据库是一种选择。现在它本质上是父/子/父/...关系。
    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2015-09-11
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多