我是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; }
}
答案 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的更多信息: