Silverlight RIA服务需要伪公共的、非属性化的方法来编译
我正在服务器端使用WCF RIA服务实现Silverlight应用程序,我遇到了一个非常奇怪的行为 此时,服务非常简单,只有几个方法,所有方法都用Silverlight RIA服务需要伪公共的、非属性化的方法来编译,silverlight,silverlight-4.0,wcf-ria-services,Silverlight,Silverlight 4.0,Wcf Ria Services,我正在服务器端使用WCF RIA服务实现Silverlight应用程序,我遇到了一个非常奇怪的行为 此时,服务非常简单,只有几个方法,所有方法都用[Invoke]属性标记。这些方法是这样的: [Invoke] MyEntity DoWorkAndReturnEntity(string someParameter) { var entity = new MyEntity(); //Do some preocessing... return entity; } 其中,MyE
[Invoke]
属性标记。这些方法是这样的:
[Invoke]
MyEntity DoWorkAndReturnEntity(string someParameter)
{
var entity = new MyEntity();
//Do some preocessing...
return entity;
}
其中,MyEntity
类型有一个带有[Key]
属性的公共属性:
public class MyEntity
{
[Key]
public int Key {get;set;}
}
如果我尝试编译解决方案,会出现以下错误:
名为
“DoWorkAndReturnEntity”没有
符合要求的签名。
返回类型必须是实体,
实体的集合,或
预定义的可序列化类型
现在是有趣的部分。如果我添加了一个公共伪方法,该方法返回相同类型的实体,但具有noInvoke
属性,那么它可以编译并完美地工作
public MyEntity __Dummy()
{
return null;
}
无论返回的对象的类型如何,所有方法都会发生这种情况。因此,我必须为每个返回的对象类型添加一个伪方法
我完全困惑不解。这里发生了什么?WCF RIA Services使用约定的配置,您的
DoWorkAndReturnEntity
方法需要使用[Query]
属性修饰,或者根本不使用属性,因为[Query]
是默认值,就像您的\uu虚拟方法一样。实体类型由域服务中的一组查询方法定义
调用方法无法返回实体类型,除非它是域服务返回的实体之一。。。因此_u伪查询方法可以让事情顺利进行