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