调试不会序列化对象的WCF服务

时间:2013-07-11 17:12:05

标签: json vb.net wcf serialization

我遇到了将对象序列化为JSON以及对WCF不熟悉的问题,我在调试方面遇到了问题。如果我通过在浏览器中输入网址来点击服务,那么我得到的就是页面不可用。

场景:我有 A类,它继承了B类的List 如果我在A类中注释它添加到它的集合中,我至少可以点击服务(显然没有数据存在),但是如果它添加到它的集合中,我就不能再打了这个服务。

接口:

<OperationContract()> _
<WebGet(UriTemplate:="getAdverseReactions", responseFormat:=WebMessageFormat.Json)> _
<ServiceKnownType(GetType(AdverseReactions))> _
<ServiceKnownType(GetType(AdverseReaction))> _
Function GetAdverseReactions() As AdverseReactions

实施界面:

Public Function GetAdverseReactions() As AdverseReactions Implements IPortalCoreService.GetAdverseReactions
    Return CoreServiceController.GetAdverseReactions()//which returns class A
End Function

A类:

<CollectionDataContract(Name:="AdverseReactionsCollection", ItemName:="AdverseReaction")> _
Public Class AdverseReactions
Inherits List(Of AdverseReaction)

B组:

<DataContract(IsReference:=True)> _
Public Class AdverseReaction

我通过附加一个进程来执行代码,并且没有抛出任何异常,我可以确认对象是按原样返回的,我显然无法将其序列化。我读过有关循环引用的内容,我的一位朋友建议这两个类可能以无限的方式相互序列化。

我的主要问题:我是否有一个地方可以看到为什么会发生这种情况,或至少有一些关于它的信息?这个问题一直在处理我,所有我想要的是序列化这个,当我这样做时,我想我将需要几个星期的假期:)。

2 个答案:

答案 0 :(得分:11)

将以下块添加到web.config <configuration>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\log\WebTrace.svclog"  />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

并确保指定的目录(c:\ log)存在且可由IIS服务写入。

完成此操作后,执行导致序列化问题的操作,然后导航到该目录并双击生成的svclog文件。

这将打开Microsoft Service Trace Viewer中的文件。打开后,您将看到左侧红色显示的错误。

单击其中一个将在右上方窗格中显示详细信息,您可以单击每个操作以确定WCF正在抱怨的内容。

答案 1 :(得分:1)

虽然这有点过时(2010年),但我认为它会给你一些尝试路径的想法。

Quickly finding WCF Serialization/Deserialization Issues

之前的StackOverflow问题可能有助于:

How to trace WCF serialization issues / exceptions