Проект, над которым мы работаем, представляет собой классическую трехуровневую архитектуру. Уровень 1 - это сервер базы данных, уровень 2 - службы приложений, а уровень 3 - уровень представления (веб-сайт).
На уровне сервисов приложений у меня есть проект, который включает модель структуры сущностей и службу на основе служб данных WCF, которая предоставляет сущности в рамках модели, например ::100100
public class DataService : DataService< PortalEntities >
Это полноценная служба OData, к которой можно обращаться через URI, например: /dataservice.svc/mytable?$filter=contains(fieldname,’string’)
. Это отлично подходит для парней, разрабатывающих что-либо с использованием jQuery, так как все, что им нужно сделать, это определить запрос. Проблема в том, что этот сервис является промежуточным, поэтому внешний мир его не видит.
Решение, которое я пробую, состоит в том, чтобы разместить на веб-сайте другую службу данных WCF, которая раскрывает сущности, созданные ссылкой на службу. Если я добавляю ссылку на службу среднего уровня, она дает мне контекст данных о том, что контекст данных используется в новой службе данных WCF:
public class DataService : DataService< PortalEntities >
Мне нужно перезаписать CreateDataSource:
protected override PortalEntities CreateDataSource()
{
return new PortalEntities(GetMianModelServiceUri());
}
Новый сервис действует как прокси и возвращает выставленные объекты (запрос .../Services/OData/DataService.svc/tbl_Country
работает нормально).
Но когда запрос передается службе, например: .../OData/DataService.svc/tbl_Country?$select=Name
, он выдает не реализованное исключение.
Есть идеи, как расширить сервис веб-сайта, чтобы он поддерживал те же запросы, что и сервис среднего уровня?