接收HTTP响应时发生错误

时间:2011-09-06 19:54:04

标签: c# .net wcf exception-handling

我有一个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文件没有显示任何错误,所以我猜它与客户端对象的反序列化有关。我怎么看是否是这种情况?

帮助寻找问题的方法很棒。

由于私有成员为空的错误,我不得不向SET添加if null。从那时起,我一直在收到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#数据类型,其中Business层具有逻辑和我的CUSTOMType。这没有问题。现在我认为这是重复,并试图将两者结合起来。二进制序列化过程可能不喜欢我的自定义类型。

构造函数在某一点上确实有私有成员的init。私有成员为null的服务抛出错误。这就是我改为SETTERS的原因。

3 个答案:

答案 0 :(得分:2)

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

您是否还为CUSTOMType<T>定义了DataContract?

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

Mapper.CreateMap<>();

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