RIA服务需要虚拟公共,非归因方法进行编译

时间:2010-06-25 08:12:03

标签: 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;
}

其中MyEntity类型具有一个具有[Key]属性的公共属性:

public class MyEntity
{
    [Key]
    public int Key {get;set;}
}

好吧,如果我尝试编译解决方案,我会收到以下错误:

  

命名操作   'DoWorkAndReturnEntity'没有   符合要求的签名。   返回类型必须是实体,   实体的集合,或其中一个   预定义的可序列化类型。

现在是有趣的部分。如果我添加一个返回相同类型的实体但具有 Invoke属性的公共虚拟方法,那么它会编译并完美运行!

public MyEntity __Dummy()
{
    return null;
}

无论返回的对象类型如何,所有方法都会发生这种情况。所以我必须为每个返回的对象类型添加一个虚方法。

我完全不解。这里发生了什么?

2 个答案:

答案 0 :(得分:1)

实体类型由域服务中的一组查询方法定义。

invoke方法不能返回实体类型,除非它是域服务返回的实体之一...因此__Dummy查询方法使事情有效。

答案 1 :(得分:0)

WCF RIA服务使用按惯例配置,您的DoWorkAndReturnEntity方法需要使用[Query]属性进行修饰,或者根本不使用任何属性,因为[Query]是默认设置,就像在你的__Dummy方法。