Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF数据服务自定义实现_C#_Wcf_Odata_Wcf Data Services - Fatal编程技术网

C# WCF数据服务自定义实现

C# WCF数据服务自定义实现,c#,wcf,odata,wcf-data-services,C#,Wcf,Odata,Wcf Data Services,如何将参数从客户端传递到服务器中的方法,以获取实体数据 在服务器端: 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();}

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

在服务器端:

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();}
   }
}
现在我试图得到的是所有Foo记录都依赖于
p1_val
p2_val
参数,但我必须将其传递给
\u serverObject.GetFoos(p1,p2)
;这样就可以从客户端而不是从服务器设置
p1
p2


请提出一些机制

我相信你想要实现的目标主要与

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

  • 在您的WCF服务器中,只需定义2个新字段,并使用所有所需字段将其称为p1和p2
  • 现在,在客户端,当您向新创建的服务添加服务引用时,您将能够填充p1和p2,并在调用服务方法时将它们从服务器传递到服务器
  • 故事的寓意:
    您需要将服务中的这两种类型定义为数据契约,以便在客户端的代理类中将它们用作参数。

    在OData服务中,您需要先拥有实体上下文,然后才能对其应用筛选器并在客户端获取数据。但正如我正确理解的,您的上下文数据取决于过滤器参数。。如果您考虑参数的另一个服务,它可以很容易地实现。当客户端向服务器提供可查询表达式时,它应该是可能的。不是吗?你需要传递一个谓词。请看以下内容:这也是我的OData服务的问题,我不能使用谓词,因为表达式是在客户端上下文上实现的,而不是将表达式从客户端传递到服务器然后实现它。谢谢您的回复。OData支持DataContract吗?从概念上讲,我同意你的观点,但我怀疑它的实施。我会尽快测试并让您知道。请看下面的帖子:再次感谢,我现在已经从客户端的元数据中获得了数据,但是我应该如何将其传递给服务器,因为Odata服务没有任何服务合同和操作合同。我应该使用[webget]你能在客户端提供一些小的实现吗?我不知道你会用哪种绑定来访问你的服务,但是我想你想让你的WCF服务保持安静,这意味着你可以通过浏览器访问它,你需要用WebGET注释你的get方法。属性。如果是这样的话,那就跟着做
    var res = from f in ctx.Foos
              where f.p1 == p1_val && f.p2 == p2_val
              select f;