RIA Service / oData ... «Запросы, которые пытаются получить доступ к одному элементу с использованием значений ключей из набора результатов, не поддерживаются». - PullRequest
1 голос
/ 28 апреля 2010

Я недавно начал работу над примером проекта, чтобы поиграть с фидом oData, полученным из службы RIA. Однако я могу просматривать фид и метаданные через любой веб-браузер, но если я пытаюсь выполнить определенные операции запроса на фиде, я получаю «неподдерживаемые» исключения.

Пример подачи oData:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<feed 
  xml:base="http://localhost:50880/Services/
              Rebirth-Web-Services-ProductService.svc/OData/" 
  xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" 
  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
  xmlns="http://www.w3.org/2005/Atom">
  <title type="text">ProductSet</title>
  <id>http://localhost:50880/Services/
              Rebirth-Web-Services-ProductService.svc/OData/ProductSet/</id>
  <updated>2010-04-28T14:02:10Z</updated>
  <link rel="self" title="ProductSet" href="ProductSet" />
  <entry>
    <id>http://localhost:50880/Services/
             Rebirth-Web-Services-ProductService.svc/OData/ProductSet
                  (guid'b0a2b170-c6df-441f-ae2a-74dd19901128')</id>
    <title type="text"></title>
    <updated>2010-04-28T14:02:10Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Product" 
      href="ProductSet(guid'b0a2b170-c6df-441f-ae2a-74dd19901128')" />
    <category term="Rebirth.Web.Models.Product" 
      scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
      <m:properties>
        <d:Id m:type="Edm.Guid">b0a2b170-c6df-441f-ae2a-74dd19901128</d:Id>
        <d:Name>Product 0</d:Name>
        <d:ProductType>Type 1</d:ProductType>
        <d:Status>Active</d:Status>
      </m:properties>
    </content>
  </entry>

Пример записи web.config:

<add name="OData"
  type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory,                   
  System.ServiceModel.DomainServices.Hosting.OData, 
  Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

Пример сервиса:

[EnableClientAccess()]
public class ProductService : DomainService {      
    [Query(IsDefault = true)]     
    public IQueryable<Product> GetProducts() {
        IList<Product> products = new List<Product>();

        for (int i = 0; i < 90; i++) {                
            Product product = new Product {
                Id = Guid.NewGuid(),
                Name = "Product " + i.ToString(),
                ProductType = i < 30 ? "Type 1" :
                   ((i > 30 && i < 60) ? "Type 2" : "Type 3"),
                Status = i % 2 == 0 ? "Active" : "NotActive"
            };

            products.Add(product);
        }

        return products.AsQueryable();
    }
}

Если я предоставляю URL "http://localhost:50880/Services/Rebirth-Web-Services-ProductService.svc/OData/ProductSet(guid'b0a2b170-c6df-441f-ae2a-74dd19901128')" в мой веб-браузер, я получаю следующий xml:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code/>
  <message xml:lang="en-US" 
    xmlns:xml="http://www.w3.org/XML/1998/namespace">
    Requests that attempt to access a single element using key values 
    from a result set are not supported.
  </message>
</error>

Я новичок в RIA и oData. Может ли это быть так просто, как мои веб-браузеры не поддерживают этот тип запросов к результирующему набору или что-то еще?

РЕДАКТИРОВАТЬ: Это то, что я вижу в LinqPad:

Member qRuntimeMethodInfo 
QueryResult.Execute () 

StackTrace    
  at System.Data.Services.Client.QueryResult.Execute()
  at System.Data.Services.Client.DataServiceRequest.Execute[TElement]
      (DataServiceContext context, QueryComponents queryComponents)  

1 Ответ

0 голосов
/ 14 марта 2011

См. Здесь: RIA Services OData "Параметры запроса не допускаются." Это все еще не осуществлено в 2010 SP1. Только что проверил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...