【问题标题】:Debugging WCF service that will not serialize objects调试不会序列化对象的 WCF 服务
【发布时间】:2013-07-12 01:34:35
【问题描述】:

我在将对象序列化为 JSON 时遇到问题,而且我是 WCF 的新手,我在调试方面遇到了问题。如果我通过在浏览器中输入 url 来访问服务,我得到的只是页面不可用。

场景:我有 A 类继承了 B 类列表如果我在 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

我通过附加进程单步执行代码,没有抛出异常,我可以确认对象按应有的方式返回,但我显然无法序列化它。我读过关于循环引用的文章,我的一个朋友建议这两个类可能会以无限的方式相互序列化。

我的主要问题是:有没有什么地方可以让我了解为什么会发生这种情况,或者至少有一些关于它的更多信息?这个问题一直在处理我,我只想序列化这个,当我这样做时,我想我会休一个星期的假期:)。

【问题讨论】:

  • 它必须是WCF 服务还是您选择实现它的方式?
  • @KarlAnderson 是的。我正在使用现有的代码库。

标签: json vb.net wcf serialization


【解决方案1】:

将以下块添加到您的 web.config &lt;configuration&gt;

  <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 抱怨的内容。

【讨论】:

  • 这太棒了。但是有没有办法查看我们试图解析的 json?
【解决方案2】:

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

Quickly finding WCF Serialization/Deserialization Issues

上一个 StackOverflow 问题可能有助于:

How to trace WCF serialization issues / exceptions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多