我们正在开发的项目是一个经典的3层架构。第1层是数据库服务器,第2层是应用程序服务,第3层是表示层(网站)。WCF数据服务 - 代理中间服务
在应用服务层我有一个项目,包括一个实体框架模型和WCF数据服务的基础服务,它暴露了模型如内的实体:
public class DataService : DataService<PortalEntities>
这是一个完全成熟的OData服务,可以通过URI查询,例如:/dataservice.svc/mytable?$filter=contains(fieldname,’string’)
。这对于使用jQuery开发任何东西的人来说非常好,因为他们所要做的就是定义查询。问题在于这项服务是中间层级的,因此外部世界无法看到。
我在尝试的解决方案是公开Web站点上的另一个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
它会抛出一个未实现的异常。
关于如何扩展网站服务的任何想法,以便它支持与中间层服务相同的查询?