【问题标题】:WCF data service custom implementationWCF数据服务自定义实现
【发布时间】:2014-09-26 13:05:59
【问题描述】:

如何将参数从客户端传递到服务器中的方法以获取实体数据。

在服务器端:

List<Foo> getFoos = _serverObject.GetFoos(p1, p2); //Here's how I am getting foo from another server

class FooProvider
{ 
   public IQueryable<Foo> Foos
   {
      get{return getFoos.AsQueryable();}
   }
}

在客户端:

var res = from f in ctx.Foos
          where f.p1 == p1_val && f.p2 == p2_val
          select f;

现在我想要得到的是所有 Foo 记录取决于 p1_valp2_val 参数,但我必须将它传递给 _serverObject.GetFoos(p1, p2);这样p1p2 是从客户端而不是从服务器设置的。

请提出一些机制

【问题讨论】:

  • 在 OData 服务中,您需要先拥有实体上下文,然后您可以对其应用过滤器并在客户端获取数据。但正如我正确理解的那样,您的上下文数据取决于过滤器参数。如果您考虑其他服务作为参数,它可以很容易地实现
  • 我认为单一服务应该是可能的,因为客户端正在向服务器提供可查询的表达式,并且它应该从中加载参数。不是吗??
  • 你需要传递一个谓词。看下面:stackoverflow.com/questions/1299534/…
  • 这也是 OData 服务的问题,我不能使用谓词,因为表达式是在客户端的上下文中实现的,而不是将表达式从客户端传递到服务器然后实现它。

标签: c# wcf odata wcf-data-services


【解决方案1】:

我确实相信您尝试实现的目标主要与

Using an ADO.NET Entity Framework DataSource(WCF Data Services)

将参数从客户端传递到服务器只是冰山一角,但是如果我错了,您的所有问题都将通过仅将复杂类型 p1 和 p2 从客户端传递到服务器来解决,然后执行以下操作:

  1. 在您的 WCF 服务器中,只需定义 2 个新的 Data Contracts 并使用您所需的所有字段调用它们 p1 和 p2
  2. 现在在客户端,当您向新创建的服务添加服务引用时,您将能够填充 p1 和 p2,并在您调用服务方法时将它们从您的 Proxy class 传递到您的服务器

故事的寓意: 您需要在服务中将这两种类型定义为数据协定,以便您可以将它们用作客户端代理类中的参数。

【讨论】:

  • 感谢您的回复。 OData 是否支持 DataContract?从概念上讲,我同意你的观点,但我怀疑它的实施。我会尽快测试并通知您。
  • 再次感谢,我现在有客户端元数据的数据,但是我应该如何将它传递给服务器,因为 Odata 服务没有任何服务合同和操作合同。我应该使用 [webget] 吗?
  • 能否请您在客户端提供一些小实现。
  • 我不知道您将使用哪种绑定来访问您的服务,但是我认为您想让您的 WCF 服务变得安静,这意味着您将能够通过浏览器访问它并且您需要使用 [webget] 属性注释您的 get 方法。如果是这种情况,请关注msdn.microsoft.com/en-us/library/dd728279(v=vs.110).aspx
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多