Служба данных WCF - как диагностировать ошибку запроса?

У меня есть приложение, которое будет использовать WCF для обслуживания различных фрагментов данных для клиентов. Однако из-за размера некоторых наборов данных, которые будут возвращены (и это потому, что клиентскому приложению необходимо отображать большое количество объектов в списке, а не потому, что я просто ленился с дизайном), я ' m, превышающие ограничения на размер сообщения.

Я ожидал этого и планировал реализовать пейджинг данных / потоковую передачу ответов (я полагаю, что Пабло Сибраро однажды написал об этом статью). Однако я видел несколько демонстраций, которые заставляют WCF Data Services выглядеть действительно круто. Я просто не мог заставить его работать на меня.

У меня нет серверной части базы данных, и я не размещаю в 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);
    }
}

При использовании этого класса возникает ошибка, а если я указываю на класс, я создаю макет в качестве теста (как в демонстрации Пабло здесь: 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 будут обрабатывать за меня такие вещи, как разбиение на страницы, и предоставят мне хороший гибкий формат, который будет работать на разных платформах.

Кроме того, если для этого невозможно будет использовать службы данных, я был бы признателен за любые указатели на разбиение данных на страницы или потоковую передачу коллекции.

Спасибо


person JohnL    schedule 22.02.2010    source источник


Ответы (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>
person Tom Brothers    schedule 22.02.2010
comment
Хммм ... Я думал, что попробовал, но я думаю, что как-то сделал это неправильно. Во всяком случае, добираюсь туда ... Я теперь получаю разумные ошибки обратно. Тот, над которым я сейчас работаю, связан с тем, что у моего класса Message есть перечисление (Тип - ошибка, предупреждение и т. Д.). В моем коде довольно много перечислений - я буду немного раздражен, если не смогу использовать ни одно из них :) Думаю, что я сделаю, это использую IgnoreProperties и добавлю другие свойства, чтобы обернуть их как типы, более удобные для данных Услуги. Спасибо! - person JohnL; 22.02.2010
comment
Если кому-то интересно, что такое перечисление, очевидно, вы можете использовать их с дополнительным вводом: msdn.microsoft.com/en-us/library/aa347875.aspx - person JohnL; 25.02.2010