Почему возврат набора данных или таблицы данных из службы WCF не является хорошей практикой? Какие есть альтернативы?

Я работаю над университетской системой управления, в которой я использую службу WCF, а в службе я использую DataTables и DataSets для получения данных из базы данных, а база данных - это sql server.

Мои вопросы

  • Является ли использование DataTables и Datasets "хорошей практикой" или "плохой практикой"?
  • Если это плохо, какова альтернатива DataTable/DataSet?
  • Если это плохо, каковы основные причины?

3 ответа

Решение

Возврат наборов данных из веб-сервисов обычно не считается "хорошей практикой". Проблемы были подробно описаны в следующих ссылках:

http://msdn.microsoft.com/en-us/magazine/cc163751.aspx
http://www.4guysfromrolla.com/articles/051805-1.aspx
http://msdn.microsoft.com/en-us/magazine/cc188755.aspx

Таким образом, самые большие проблемы с возвращением DataSet кажется, что объекты из веб-сервисов связаны с производительностью сериализации, совместимостью не с.net. Кроме того, общая, полиморфная природа DataSet как правило, высокая структура данных до времени выполнения, поэтому определение WSDL не дает полного описания сигнатуры метода. Однако, как и при любом проектном решении, вам необходимо взвесить затраты и выгоды и определить наилучшее соответствие с учетом ваших конкретных целей и ограничений.

С точки зрения альтернатив, вы можете рассмотреть возможность использования общей коллекции (например, List<yourClassHere>) или, возможно, даже рассмотреть некоторые изменения архитектуры, чтобы разрешить использование ODATA.

Следующие ссылки предоставляют полезную справочную информацию для возврата сущностей через веб-сервисы. http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-14.aspx http://www.codeproject.com/Articles/127395/Implementing-a-WCF-Service-with-Entity-Framework http://msdn.microsoft.com/en-us/data/hh237663.aspx

Есть 3 причины для неудачного типа возврата как datatable в услугах WCF

  • Вы должны указать имя таблицы данных, например:

    MyTable=new DataTable("tableName");
    
  • Когда вы добавляете ссылку на стороне клиента службы WCF, выберите повторно используемую DLL system.data

  • Укажите атрибут на datatable переменная-член как

    [DataMember]
    public DataTable MyTable{ get; set; }
    

Я использую DataTable в моем приложении WCF, но получаю ошибку. Так я исправил ошибку.

При возврате DataTable из веб-службы в WCF в приложение Windows Form. Я получал это исключение.

System.ServiceModel.CommunicationException: 'Произошла ошибка при получении HTTP-ответа на http://localhost:52968/MunerahService1.svc. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP. Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы). Смотрите журналы сервера для более подробной информации.'

Это происходило каждый раз, когда я пытался получить DataTable

Чтобы исправить исключение, мне нужно было дать DataTable имя.

код с ошибкой

 tab = new DataTable(); 

Исправлен код для удаления исключения

 tab = new DataTable("Doctor_info");
Другие вопросы по тегам