WCF数据服务 - 如何诊断请求错误?

Joh*_*hnL 18 wcf wcf-data-services

我有一个应用程序,它将使用WCF向客户端提供各种数据块.但是,由于将返回的一些数据集的大小(这是因为客户端应用程序需要在列表中显示大量对象,而不是因为我在设计中只是懒惰)我达到邮件大小限制.

我对此有所期待,并计划实施数据分页/响应流(我相信Pablo Cibraro曾就此发表过一篇文章).但是,我看到一些使WCF数据服务看起来很酷的演示.我只是无法让它适合我.

我没有数据库后端,我不在IIS内部托管.我已经能够得到一些基本对象的例子,但是一旦我从我的应用程序中插入对象,它就不起作用 - 我得到一个请求错误,这似乎是无益的 - 它只是建议检查服务器日志而不建议我如何做到这一点.我怀疑它假设我正在使用IIS托管,IIS可能会记录它承载的数据服务的消息.

我尝试使用的一个相当简单的类是用于日志消息(我希望诊断仪表板式客户端能够远程显示服务器日志,比如说,过去24小时):

public class Message
{
    public string Source { get; set; }
    public MessageType Type { get; set; }
    public DateTime Timestamp { get; set; }
    public string MessageText { get; set; }
    public override string ToString()
    {
        return string.Format("[{0}] [{1}] [{2}] {3}", Timestamp.ToString(), Source, Type, MessageText);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这个类会产生错误,而如果我将它指向一个类,我将其模拟为测试(如Pablo的演示:http://msdn.microsoft.com/en-us/data/cc745968.aspx)然后它工作良好.有关为什么会这样做的任何想法,或者我如何从错误中获得有用的东西?

下面是我的服务定义和我用来公开我想要返回的集合的IQueryable <>实现的类(目前我只完成了Log,这是类型List<Message>)

public class DataServiceFacade
{
    public IQueryable<Message> Log
    {
        get
        {
            return Program.Log.AsQueryable();
        }
    }
}

public class DataServiceHost : DataService<DataServiceFacade>
{
    public static void InitializeService(IDataServiceConfiguration config)
    {
        config.UseVerboseErrors = true;
        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这可能是一件简单的事情,但我已经花了太多时间把头撞在这个特殊的砖墙上.我希望数据服务能处理像我这样的分页,并给我一个很好的灵活格式,可以在不同的平台上运行.

此外,如果不可能为此使用数据服务,我会欣赏有关数据分页或流式传输的任何指针.

谢谢

Tom*_*ers 19

听起来你只看到通用的"响应错误"消息.要查看该消息的详细信息,您需要将行为修改为"includeExceptionDetailInFaults".

您可以更改配置文件中的行为.

<services>
    <service name="DataServiceHost"
             behaviorConfiguration="DataServiceBehavior">
        <endpoint name="DataServiceHost"
                  address=""
                  binding="webHttpBinding"
                  contract="System.Data.Services.IRequestHandler" />

    </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="DataServiceBehavior">
            <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
    </serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)