2010-02-22 3 views
18

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

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

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

Благодаря

ответ

19

Это звучит, как вы видите только родовое сообщение «Error Response». Чтобы просмотреть подробности этого сообщения, вам необходимо изменить поведение на «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> 
+0

Хммм ... Я думал, что пробовал это, но, наверное, я сделал это неправильно. В любом случае, добраться туда ... Теперь я получаю разумные ошибки. В настоящее время я работаю над тем, что мой класс сообщений имеет перечисление (Тип - ошибка, предупреждение и т. Д.). В моем коде довольно много перечислений - я буду немного раздражен, если я не смогу использовать ни один из них :) Я предполагаю, что я буду использовать IgnoreProperties и добавить другие свойства, чтобы обернуть их как типы, более дружественные к службам данных. Спасибо! – JohnL

+0

В случае, если кто-то задается вопросом об перечисляемой вещи, очевидно, вы можете использовать их с некоторыми дополнительными вводами: http://msdn.microsoft.com/en-us/library/aa347875.aspx – JohnL

Смежные вопросы