【问题标题】:An error occurred while receiving the HTTP response接收 HTTP 响应时出错
【发布时间】:2011-09-06 19:54:03
【问题描述】:

我有一个在服务器上托管服务的 wcf Web 应用程序。我正在创建客户端(api)来读取这些服务。

我已使用以下方式将跟踪添加到我的服务端:

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="messages"
          type="System.Diagnostics.XmlWriterTraceListener"
          initializeData="bin\messages.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

.svclog 文件没有显示任何错误,所以我猜它与客户端对象的反序列化有关。我如何查看是否是这种情况?

帮助追踪问题会很棒。

由于私有成员为空的错误,我不得不将 if null 添加到 SETters。从那以后,我一直收到 http 错误。

DTO 示例:

[DataContract]
public class PersonDTO 
{              
    private CUSTOMType<string> givenNameField ;    
    private CUSTOMType<string> middleNameField ;    
    private CUSTOMType<string> familyNameField ;         

    [DataMember]
    public string GivenName
    {
        get
        {
            return this.givenNameField.Value;
        }
        set
        {
            if (this.givenNameField == null)
                this.givenNameField = new CUSTOMType<string>(); 
            this.givenNameField.Value = value;
        }
    }

    [DataMember]
    public string MiddleName
    {
        get
        {
            return this.middleNameField.Value;
        }
        set
        {
            if (this.middleNameField == null)
                this.middleNameField = new CUSTOMType<string>(); 
            this.middleNameField.Value = value;
        }
    }

    [DataMember]
    public string FamilyName
    {
        get
        {
            return this.familyNameField.Value;
        }
        set
        {
            if (this.familyNameField == null)
                this.familyNameField = new CUSTOMType<string>(); 
            this.familyNameField.Value = value;
        }
    }
}

编辑:

最初我有两个对象:Business 和 DTO。唯一的区别是 DTO 只是直接的 C# 数据类型,其中业务层具有逻辑和我的 CUSTOMType。这没有问题。现在我认为这是重复的,并试图将两者结合起来。二进制序列化过程可能不喜欢我的自定义类型。

在某一时刻,构造函数确实具有私有成员的 init。该服务抛出私有成员为空的错误。这就是为什么我改为使用SETTERS。

【问题讨论】:

    标签: c# .net wcf exception-handling


    【解决方案1】:

    在客户端添加类似的跟踪,这可能会对正在发生的事情有所了解。

    您是否还为您的CUSTOMType&lt;T&gt; 定义了 DataContract?

    编辑;您是否确保在序列化期间调用 get 属性时私有字段永远不会为空?如果未设置该属性,则可能导致空引用异常。也许尝试在构造函数中实例化私有字段?

    【讨论】:

    • 不,我没有 CUSTOMType 的数据合同?即使那是私人成员,我也需要一个吗?如果是这样,该对象中有多少需要成为数据合约?
    • 没关系,我有点快,没注意到你只暴露了字符串。
    • 我明天(上午)将跟踪添加到客户端并查看。仍然很奇怪,我现在才遇到某种错误。
    • 您是否确保在序列化期间调用 get 属性时私有字段永远不会为空?如果未设置该属性,则可能导致空引用异常。也许尝试在构造函数中实例化私有字段?
    【解决方案2】:

    除了客户端追踪,还可以下载 fiddler。它作为您和服务器之间的代理运行,并允许您准确查看发送到服务器和从服务器接收的内容。

    http://www.fiddler2.com/fiddler2/

    【讨论】:

    • 我也会试试这个。干杯。
    【解决方案3】:

    havardhu 和 bryanmac 都给了我一些碎片来找到我的问题。最后,这是我正在使用的 ORM AutoMapper.dll 的映射问题。

    其中一个映射语句不存在。

    Mapper.CreateMap<>();
    

    WCF 不擅长提供错误消息,我希望 WCF 团队能够改进这一点。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 2023-01-30
      • 2013-03-27
      • 2014-06-03
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多