У меня есть приложение, которое будет использовать 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 для этого, я буду благодарен за любые указатели на подкачку данных или потоковое содержимое коллекции.
Спасибо