【问题标题】:WCF Data Service - How To Diagnose Request Error?WCF 数据服务 - 如何诊断请求错误?
【发布时间】:2010-02-22 17:51:15
【问题描述】:

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

我预料到了这一点,并计划实现数据分页/响应流(我相信 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);
    }
}

使用这个类会产生错误,而如果我将它指向一个我模拟为测试的类(如 Pablo 在此处的演示中:http://msdn.microsoft.com/en-us/data/cc745968.aspx),那么它可以正常工作。关于为什么会这样,或者我如何从错误中获得有用的任何想法?

下面是我的服务定义和我用来公开我想要返回的集合的 IQueryable 实现的类(目前我只完成了日志,类型为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);
    }
}

现在,这可能很简单,但我已经花了太多时间将头撞在这堵特殊的砖墙上。我希望 Data Services 能够为我处理诸如分页之类的事情,并给我一个很好的灵活格式,可以在不同的平台上工作。

此外,如果无法为此使用数据服务,我将不胜感激任何有关数据分页或流式传输集合的指针。

谢谢

【问题讨论】:

    标签: wcf wcf-data-services


    【解决方案1】:

    听起来您只看到一般的“响应错误”消息。要查看该消息的详细信息,您需要将行为修改为“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>
    

    【讨论】:

    • 嗯...我以为我试过了,但我想我做错了。无论如何,到达那里......我现在得到了明智的错误。我目前正在处理的一个问题是我的 Message 类有一个枚举(类型 - 错误、警告等)。我的代码中有很多枚举 - 如果我不能使用它们中的任何一个,我会有点恼火:) 我想我要做的是使用 IgnoreProperties 并添加其他属性以将它们包装为对数据更友好的类型服务。谢谢!
    • 如果有人对 enum 感到疑惑,显然您可以通过一些额外的输入来使用它们:msdn.microsoft.com/en-us/library/aa347875.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多