我有一个带有单个[Invoke]操作的自定义域服务,该操作返回一个User对象列表。
为了让它编译,我必须在[Invoke]操作之外的属性(下面突出显示为'DONOTUSE')或方法中放弃User对象,否则我将遇到以下编译时错误:
名为'GetUsers'的操作不符合所需的签名。返回类型必须是实体或复杂类型、实体或复杂类型的集合,或预定义的可序列化类型之一。
一旦我放弃了这个属性,它就会按预期编译并执行,但是这个hack让我非常恼火。
我做不希望使用[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,并且它编译得很好。我无论如何也弄不明白为什么一个比另一个更容易编译。
你试过这样暴露用户吗?
IQueryable<User> GetUsers() { throw new NotImplementedException(); }
这是一种强制WCF Ria代码生成器公开实体客户端的方法。你也可以尝试使用共享代码,Class.shared.cs,在WCF Ria文档