WCF数据服务是一个强大的工具,但同时也存在一些限制。本文将介绍这些限制,并展示如何通过创建自定义数据服务提供者、定制服务引用生成等方法来解决这些问题。
WCF数据服务虽然功能强大,但目前存在一些关键的局限性:
以下是如何开始使用示例服务的步骤:
考虑到这些局限性,创建了一个名为复合数据服务框架的项目。该项目的主要目的是允许将多个数据源聚合在一起,创建一个单一的复合WCF数据服务,如下图所示。
创建复合数据服务非常简单。首先,为每个要公开的模型添加一个WCF数据服务类 - 在提供的示例解决方案中,有两个模型 - OrdersDataModel和UsersDataModel。这些模型是实体框架数据模型。现在创建另一个WCF数据服务,命名为CompositeDataService。现在所需要做的就是派生自CompositeDataService并添加每个不同的WCF数据服务作为CompositeDataSource。
通过向应用程序添加WCF数据服务来创建复合数据服务:
public class CompositeDataServiceSample : CompositeDataServiceFramework.Server.CompositeDataService
{
private WcfDataServiceDataSource ordersDataService;
private WcfDataServiceDataSource usersDataService;
}
接下来,像初始化任何正常的WCF数据服务一样初始化服务 - 指定每个对象和操作的访问权限。
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
在构造函数中,构建两个数据源并将它们添加到复合数据服务中,然后初始化它。
public CompositeDataServiceSample()
{
ordersDataSource = new WcfDataServiceDataSource(new OrdersDataService(), new OrdersModelContainer(), new Uri("http://localhost:65110/OrdersDataService.svc"));
usersDataSource = new WcfDataServiceDataSource(new UsersDataService(), new UsersDataModelContainer(), new Uri("http://localhost:65110/UsersDataService.svc"));
AddDataSource(ordersDataSource);
AddDataSource(usersDataSource);
Initialise();
}
这个项目中已经有很多代码了,随着构建完整的功能集,还会有更多的代码。因此,将以更高层次的方式描述代码,而不是像大多数文章中那样逐行讲解。
首先,派生一个类自DataService。这将是代表复合数据服务的主要对象。这个对象还必须实现IServiceProvider接口,以允许实例化支持接口的实例。
复合数据服务框架托管在CodePlex上:。项目的主要页面上有路线图。欢迎任何建议或想法!随着这个项目的发展,将完成以下任务: