从.NET客户端消耗了ADO.NET数据服务的服务运营
-
21-09-2019 - |
题
我想建立一个ADO.NET数据服务,有很多实体和一些服务操作。一方面我创建了一个ASP.NET Web应用程序,其中一个ADO.NET实体数据模型和ADO.NET数据服务的位置。在另一侧上我创建的具有服务引用到数据服务的第二ASP.NET Web应用程序。
实体通过很好的到来,我可以使用LINQ检索我想要的数据:
TestEntities entities = new TestEntities(
new Uri("http://localhost/service/service.svc"));
var query = from customer in entities.Customers
where customer.ID == 1234
select customer;
query.ToList();
此工作。然而,通过服务运营检索信息完全逃避我。 数据服务端代码:
public static void InitializeService(IDataServiceConfiguration config) {
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
}
[WebInvoke]
public IQueryable<Customer> GetSomeCustomers() {
TestEntities entities = new TestEntities();
return from customer in entities.Customers
where customer.ID > 0 && customer.ID < 20
select customer;
}
当我加入了服务引用我的客户项目,Visual Studio中没有任何服务运营回升。我知道可以通过构造URI和的任一DataServiceContext对象或对象TestEntities的BeginExecute方法(在这种情况下),或类似的东西访问它们,但是这不是我想要的。
我要的是使用LINQ要经过服务操作返回的数据。 这可能吗?它应该是,正确?
解决方案
简单的东西,一旦你知道了。
就在几个事项:
目前DataServiceClientGenerator(它使用EntityClassGenerator)犯规创建用于服务操作的方法。
在上下文中使用的createQuery方法不支持服务业务,目前他们的工作,因为有在该客户端(你会发现,如果你使用的createQuery的“()”被添加到年底没有验证查询方法类似这样的“ HTTP://localhost/service.svc/method()?参数= 2 ”,则可以使用的createQuery但不推荐使用。
不是所有的服务操作返回值,但在这个例子中,我将只显示该做的那些例子。
public partial class NorthwindEntities
{
public IQueryable<Order> OrdersByRegion(int regionId)
{
return this.Execute<Orders>(new Uri(string.Format("{0}OrdersByCountry?regionId={1}", this.BaseUri, regionId), UriKind.RelativeOrAbsolute));
}
}
如果您需要了解更多信息,请随时提出任何问题。
PS:在你的榜样你不需要你的服务操作(服务器端)DataService在早已当服务被称为实例化一个参考创建新的数据环境。
可以实际覆盖创建这样的服务方的数据上下文的:
protected override NorthwindEntities CreateDataSource()
{
return new NorthwindEntities();
}