从.net客户端使用服务操作给我一个错误

时间:2012-08-22 09:37:10

标签: wcf-data-services odata

如果我从浏览器中使用我的服务操作,它将完美运行。

如果我从.net客户端使用我的服务操作,它会给我一个错误

“类型'System.Linq.IQueryable`1 [MyEntity]'没有可设置的属性。”

有什么想法吗?感谢。

客户代码:

public IQueryable<MyEntity> CallMyOperation(string param1 = "", string param2 = "") {
        DataServiceQuery<IQueryable<MyEntity>> q =
            CreateQuery<IQueryable<MyEntity>>("MyOperation")
                .AddQueryOption("param1", "'" + param1 + "'")
                .AddQueryOption("param2", "'" + param2 + "'");
        return
            Execute<IQueryable<MyEntity>>(
                new Uri(q.RequestUri.ToString().Replace("MyOperation()", "MyOperation"))).
                FirstOrDefault();
    }

Wcf服务代码:

        [WebGet]
    public IQueryable<MyEntity> MyOperation(string param1 = "", string param2 = "") {
     ...
    }

    public static void InitializeService(DataServiceConfiguration config) {
        config.DataServiceBehavior.MaxProtocolVersion =
            DataServiceProtocolVersion.V3;
        config.UseVerboseErrors = true;
        config.SetEntitySetAccessRule("MyEntity", EntitySetRights.AllRead);
        config.SetServiceOperationAccessRule("MyOperation", ServiceOperationRights.AllRead);
    }

1 个答案:

答案 0 :(得分:2)

Execute<T>的调用应该只包含您要实现的泛型类型,而不是IQueryable<T>。物化过程运行时,它会尝试从WebResponse中收到的实体设置对象的属性。由于IQueryable<T>没有您在线上重新获得的属性,因此实现失败。

如果您仍想要IQueryable,可以致电Execute<MyEntity>(...).AsQueryable()