WCF返回自定义类型

时间:2010-06-13 13:29:05

标签: wcf list object

我是WCF的新手,试图执行相对简单的任务。 我正在尝试返回从数据库中读取的对象列表,但无法克服一些非常烦人的异常。 问题很简单?这张照片出了什么问题?

[ServiceContract]
public interface IDBService
{        
    [OperationContract]
    string Ping(string name);

    [OperationContract]
    InitBDResult InitBD();
}

public InitBDResult InitBD()
        {
            _dc = new CentralDC();
            InitBDResult result = new InitBDResult();
            result.ord = _dc.Orders.First();
            return result;
        }


[DataContract]
    public class InitBDResult
    {
        //[DataMember]
        //public List<Order> Orders { get; set; }

        [DataMember]
        public Order ord { get; set; }
    }

2 个答案:

答案 0 :(得分:3)

根据您发布的内容:

public InitBDResult InitBD()
{
    _dc = new CentralDC();
    InitBDResult result = new InitBDResult();
    result.ord = _dc.Orders.First();
    return result;
}

该方法是否包含在实现IDBService接口的类中?从你的帖子中可以清楚地看出......

[DataContract]
public class InitBDResult
{
        //[DataMember]
        //public List<Order> Orders { get; set; }

        [DataMember]
        public Order ord { get; set; }
}

Order类是否也标有[DataContract]以及应该使用[DataMember]属性序列化的任何属性?

默认情况下,WCF使用数据协定序列化程序,它要求返回类(所有这些)以[DataContract]标记,并且在这些类中,应返回所有属性和字段。序列化响应具有[DataMember]属性。

[Serializable]属性对默认WCF序列化没有任何作用。阅读MSDN杂志中的WCF serialization - 强烈推荐!

对于开发,从WCF服务打开异常详细信息通常很有帮助,因此您可以获得有关出错的更多信息。为此,您需要在配置中具有服务行为:

 <behaviors>
    <serviceBehaviors>
      <behavior name="debugging">
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

然后在您的配置中将该行为应用于您的服务:

<service name="...." behaviorConfiguration="debugging">

然后,您将获得有关异常详细信息的信息 - 而不仅仅是通用的“出错”异常。

答案 1 :(得分:0)

对于像这样的WCF问题,使用服务跟踪日志记录工具很有用。您必须在配置中启用它。然后,执行失败的操作并查看日志。它很可能会为您提供有关该问题的详细异常消息。

有关MSDN的更多信息:

http://msdn.microsoft.com/en-us/library/ms732023.aspx