我正在服务器端实现一个带有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;
}
无论返回的对象类型如何,所有方法都会发生这种情况。所以我必须为每个返回的对象类型添加一个虚方法。
我完全不解。这里发生了什么?
答案 0 :(得分:1)
实体类型由域服务中的一组查询方法定义。
invoke方法不能返回实体类型,除非它是域服务返回的实体之一...因此__Dummy查询方法使事情有效。
答案 1 :(得分:0)
WCF RIA服务使用按惯例配置,您的DoWorkAndReturnEntity
方法需要使用[Query]
属性进行修饰,或者根本不使用任何属性,因为[Query]
是默认设置,就像在你的__Dummy
方法。