Можно ли использовать службы данных WCF (ne OData, ne Astoria, ne ADO.NET Data Service) с NetTcpBinding? - PullRequest
5 голосов
/ 03 сентября 2010

Я смотрю на создание службы WCF для запроса данных по медленному спутниковому соединению, и мне действительно нравятся службы данных WCF.Проблема, которую я вижу, состоит в том, что HTTP является очень подробным форматом, и, поскольку все, что я делаю, является внутренним и .NET, возможно ли использовать вместо него NetTcpBinding, чтобы уменьшить некоторые издержки?

Возможно ли это вообще?Полезности

Ответы [ 2 ]

4 голосов
/ 04 сентября 2010

Исследуя это самостоятельно, я наткнулся на статью MSDN, посвященную автономным службам данных WCF . В этой статье отмечается, что вы можете разместить службу с DataServiceHost , который по-прежнему требует HTTP (он получен из WebServiceHost).

Но вы также можете свернуть свой собственный хост, используя IDataServiceHost . Вот выдержка из статьи MSDN:

Для случаев, когда хост WCF реализация слишком ограничена, вы также можно определить собственный хост для служба данных. Любой класс, который реализует интерфейс IDataServiceHost может быть использован в качестве сетевого хоста для служба данных. Пользовательский хост должен реализовать IDataServiceHost интерфейс и быть в состоянии справиться с следующие основные обязанности хост службы данных:

  • Укажите для службы данных корневой путь службы.
  • Обрабатывать информацию заголовков запросов и ответов в соответствующих Реализация члена IDataServiceHost.
  • Обработка исключений, вызванных службой данных.
  • Проверка параметров в строке запроса.

В статье, похоже, предполагается, что MS должным образом отделила обязанности по обслуживанию данных от обязанностей сетевого интерфейса. Если это так, то я должен быть в состоянии написать NetTcpDataServiceHost. Кто-нибудь когда-нибудь писал IDataServerHost? Есть предложения?

3 голосов
/ 04 сентября 2010

Нет, службы данных WCF построены поверх REST, а сам REST очень тесно и полностью основан на HTTP-глаголах, таких как GET, PUT, POST и т. Д. - вы не можете запускать их через NetTcp, поскольку они по своей сути связаны сстек протокола HTTP.

Может быть, у вас есть другие варианты, чтобы уменьшить объем передаваемых данных?Настройте ваши объекты - обрежьте жир, если можете - как по количеству извлеченных строк, так и по количеству переданных полей атрибутов / данных.Это, наверное, самый перспективный подход.

...