Подтвердить что ты не робот

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

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

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

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

Спасибо

4b9b3361

Ответ 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>