尝试了解使用WCF数据服务可能有哪些选项,基本上我试图通过从第三方api调用集中创建RestFull服务来抽象第三方http API。除此之外,我对Odata表示和数据服务的Api支持感兴趣。
示例第三方通话,
1)GetAll Vehicles
I want to represent it in a restfull call http://localhost/Vehicles
2)GetVehicleLocation(车辆)
I want to represent it in a restfull call http://localhost/Vehicles(1)/Location
我正在寻找如何从Web服务调用中调用List {使其变得简单}的挑战。这部分是严格的前进,我需要一些指导是什么时候进行调用2),因为位置信息是基于通过Vehcle的webservice调用,Linq到Object假设如果我理解正确POCO填充..
这篇文章 Data Services Streaming似乎正在路上......
答案 0 :(得分:1)
我正在研究类似的情况。由于WCF数据服务的主要用例是通过实体框架公开您的数据库表,因此找到关于做其他任何事情的好信息在实际上有点薄弱。
您要做的事情实际上相当简单,可以通过使用WCF数据服务工具包进行简化; you want to wrap odata around what
您需要在根级别公开两种实体类型:Vehicle和Location
您需要DataService<MyDataContext>
作为服务的入口点,这需要为车辆和位置定义两个IQueryable属性。您可能不需要在根级别访问位置,但这是使其与底层反射提供程序一起工作的唯一方法。如果没有位于根级别的位置,则服务不会公开位置实体的元数据。
您的Vehicle实体需要具有[ForeignProperty]
属性的位置属性
您必须为具有名称的方法的车辆实施存储库; GetOne(string id)
,GetAll()
和GetLocationByVehicle(string id)
方法,ID将是您拨打api电话所需的VehicleId。
在/ Vehicles上发出Get请求将调用存储库上的GetAll()方法,/ Vehicles(1)将调用GetOne()方法和/ Vehicles(1)/ Location将调用GetLocationByVehicle()方法传入Id'1'。