如果我从浏览器中使用我的服务操作,它将完美运行。
如果我从.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);
}
答案 0 :(得分:2)
对Execute<T>
的调用应该只包含您要实现的泛型类型,而不是IQueryable<T>
。物化过程运行时,它会尝试从WebResponse
中收到的实体设置对象的属性。由于IQueryable<T>
没有您在线上重新获得的属性,因此实现失败。
如果您仍想要IQueryable
,可以致电Execute<MyEntity>(...).AsQueryable()
。