我有一个自定义域服务,其中一个[Invoke]操作返回一个User对象列表。
为了让它编译,我必须在属性中突出显示User对象(在下面突出显示为'DONOTUSE')或[Invoke]操作之外的方法,否则我遇到以下编译时错误:
名为“GetUsers”的操作不符合所需的签名。返回类型必须是实体或复杂类型,实体或复杂类型的集合,或者是预定义的可序列化类型之一。
一旦我把这个属性收起来,它就会按照预期进行编译和执行,但黑客会惹恼我。
我不希望使用[查询]属性,所以请不要建议我这样做。我这样说是因为如果我切换到[查询]它编译得很好,但是,我不想处理EntityQuery结果集或它的延迟执行。
由于我设计架构的方式,本例中的用例需求和MSDN文档,[Invoke]是最合适的方法。
[EnableClientAccess()]
public class UserDomainService : DomainService
{
private IUserService userService;
public UserDomainService(IUserService service)
{
userService = service;
}
[Invoke, RequiresAuthentication]
public List<User> GetUsers()
{
return userService.GetUsers();
}
//HOW CAN I REMOVE THE FOLLOWING AND STILL COMPILE?
public User DONOTUSE()
{
return null;
}
}
我会告诉你这个...我有另一个项目,它有自定义DomainServices和单个[Invoke]操作,而它编译得很好。对于我的生活,我不能弄明白为什么一个人会编译另一个。
更新
请参阅下面所选答案中的评论。
答案 0 :(得分:2)
您是否尝试过这样的用户曝光?
IQueryable<User> GetUsers() { throw new NotImplementedException(); }
这是强制WCF Ria代码生成器公开您的实体客户端的一种方法。您也可以尝试使用共享代码,Class.shared.cs,在WCF Ria docs中查找