2011-06-21 52 views
2

我曾尝试使用下面的文章作为指导创建一个WCF服务WebHttp ..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服务。

有什么想法?

回答

0

那篇文章的有效期为WCF WebHttp服务,以及 - 你只需要去ServiceHost的这些服务的参考。在博客中的示例中,服务被使用ASP.NET路由激活,并且WebServiceHostFactory,这是它创建ServiceHost实例由该服务所使用的组件。

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

我最近张贴了关于服务主机工厂的一篇文章在http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/wcf-extensibility-servicehostfactory.aspx,在这里你可以找到有关此组件的详细信息。

+0

我试图现在使用这种方法。但是,它看起来不像它支持的JSON,它是我们使用的传输格式。我仍然试图确定这是否可行,但如果您有更多的建议,我可以使用它。 – Altonymous

+0

JSON序列化不支持循环 - 您需要中断循环或选择另一种序列化格式。 – carlosfigueira

+0

我很害怕那个。在我读到你的评论之前,我得出了同样的结论,但我不想相信它。我仍然不想相信,但我想我没有太多的选择。你有关于如何打破周期的建议吗?改变数据库是一种选择。现在它基本上是一个父母/孩子/父母/ ......的关系。 – Altonymous