2

我有一个自定义域服务,其中包含一个返回用户对象列表的 [Invoke] 操作。

为了让它编译,我必须在 [Invoke] 操作之外的属性(下面突出显示为“DONOTUSE”)或方法中找出 User 对象,否则我会遇到以下编译时错误:

名为“GetUsers”的操作不符合所需的签名。返回类型必须是实体或复杂类型、实体或复杂类型的集合或预定义的可序列化类型之一。

一旦我找出了属性,它就会按预期编译和执行,但是黑客让我很恼火。

我不想使用[Query] 属性,所以请不要建议我这样做。我这样说是因为如果我确实切换到 [Query] 它编译得很好,但是,我不想处理 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;
    }

}

我会把这个留给你的......我有另一个项目,它具有带有单个 [Invoke] 操作的自定义 DomainServices,编译得很好。对于我的一生,我无法弄清楚为什么一个会编译另一个。

更新

请参阅下面所选答案中的评论。

4

1 回答 1

2

你试过这样暴露用户吗?

IQueryable<User> GetUsers() { throw new NotImplementedException(); }

That's a way of forcing the WCF Ria code generator to expose your entity client-side. You might try using shared code too, Class.shared.cs, look it up in the WCF Ria docs

于 2011-04-19T08:15:08.083 回答