Потребление операции обслуживания from.net клиент дайте мне ошибку
Если я использую свою служебную операцию из браузера, она работает отлично.
Если я использую свою служебную операцию из клиента .net, это дает мне ошибку
" система типов.Линк.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 ответ:
Вызов
Execute<T>
должен иметь только общий тип, который вы хотите материализовать, а неIQueryable<T>
. Когда процесс материализации запускается, он пытается задать свойства для объекта из сущностей, которые он получил вWebResponse
. ПосколькуIQueryable<T>
не обладает свойствами, которые вы получаете обратно на проводе, материализация терпит неудачу.Если вы все еще хотите
IQueryable
, Вы можете позвонитьExecute<MyEntity>(...).AsQueryable()
.