我想使用WCF RIA Services来访问Silverlight应用程序中的数据。但是,数据不是从本地数据存储提供的,而是从另一个WCF数据服务(我正在访问外部CRM系统)提供的。我不想直接访问外部服务,因为我必须在我的RIA服务中混搭来自多个数据源的数据。
这可能是实现这一目标的最简单方法吗? C#中的一些源代码将不胜感激。
编辑: 中心问题是如何以简单的方式从外部服务填充实体。有一个related question,但答案并没有解决我的问题。
答案 0 :(得分:2)
我认为您的混淆可能是用于添加RIA服务的Visual Studio向导假定您将使用EntityFramework来处理数据。我不认为您想要从第二个WCF服务的数据中创建EF模型。相反,创建您的RIA服务以直接从DomainService派生并覆盖您需要的方法。在每个查询方法中,只需查询远程服务并将结果返回给Silverlight客户端。为了使RIA服务魔术代码生成起作用,您需要在应用程序中定义一组DTO对象,以包装远程WCF服务的结果。
这是一个快速示例。注意 - 我刚刚说明了我的意思。您需要调用正在使用的实际服务并构建错误处理,输入检查等。
namespace YourApp.Web
{
[EnableClientAccess]
public class WcfRelayDomainService : DomainService
{
public IQueryable<Restaurant> GetRestaurants()
{
// You should create a method that wraps your WCF call
// and returns the result as IQueryable;
IQueryable<MyDto> mydtos = RemoteWCF.QueryMethod().ToQueryable();
return mydtos;
}
public void UpdateDTO(MyDto dto)
{
// For update or delete, wrap the calls to the remote
// service in your RIA services like this.
RemoteWCF.UpdateMethod(dto);
}
}
}
希望能帮到你!有关更多提示,请参阅How to set up RIA services with Silverlight 4.0 and without EF。