2012-08-17 5 views
1

OData 서비스를 세 번째 버전으로 업데이트해야합니다. 이제 NuGet 저장소와 DataServiceConfiguration에서 오래된 라이브러리를 new로 변경하여 MaxProtocolVersion 속성을 V3로 설정했습니다.
이 정도면 충분하지 않을 수 있습니까? 누군가 내 응용 프로그램의 any/all 필터를 지원하기 위해 정확히 수행해야하는 것은 무엇입니까?any/all 필터를 지원하는 OData v3 서비스 작성 방법

나는이 같은 요청을 보낼 때 :
http://expamle.com/OData.svc/Contacts $ 필터 = 전화/어떤? (P : P/번호 EQ '111-222-333-11')

내 응용 프로그램 던지는이 예외 :

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
    <code>4</code> 
    <message xml:lang="" /> 
     <innererror> 
      <message>No property 'any' exists in type 'City' at position 5.</message> 
      <type>System.Data.Services.DataServiceException</type> 
     <stacktrace> 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMemberAccess(Expression instance) 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParsePrimary() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseUnary() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMultiplicative() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseAdditive() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseComparison() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalAnd() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalOr() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseExpression() 
      at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseWhere() 
      at System.Data.Services.Parsing.RequestQueryParser.ParseLambdaForWhere(IDataService service, RequestDescription requestDescription, Type queryElementType, String expression) 
      at System.Data.Services.Parsing.RequestQueryParser.Where(IDataService service, RequestDescription requestDescription, Expression source, String predicate) 
      at System.Data.Services.RequestQueryProcessor.ProcessFilter() at System.Data.Services.RequestQueryProcessor.ProcessQuery() 
      at System.Data.Services.RequestQueryProcessor.ProcessQuery(IDataService service, RequestDescription description) 
      at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery) 
      at System.Data.Services.DataService`1.ProcessIncomingRequestUri() 
      at System.Data.Services.DataService`1.HandleRequest() 
     </stacktrace> 
    </innererror> 
</error> 

답변

0

v3을 지원하기 위해 WCF Data Services를 5.0으로 업데이트해야 할 수도 있습니다 - here을 다운로드 할 수 있습니다.

그것은 도시처럼 들린다
+0

나는 이미이 작업을 수행하고 있습니다. 프레임 워크 라이브러리에서 DataServiceProtocolVersion enum에는 "V1"과 "V2"값만 있습니다. –

+0

@IgorVenzhyk - 설치 후에 프로젝트에서 참조를 수정 했습니까? 또는 설치 후 Visual Studio를 다시 시작한 후 "서비스 참조 추가"기능을 사용 했습니까? –

+0

테스트 응용 프로그램 용으로 브라우저를 사용하고 있습니다. 프로젝트에서 모든 참조가 정확함 –

0

당신은 어떤을 필요로하지 않는 경우에 싱글 (안 컬렉션)이며,이 같은 일이 잘 작동 것 :

http://example.com/OData.svc/Contacts?$filter=City/Name eq 'New York'

어떤을/모든에만 적용 $ 필터에서 참조 된 모음.

+0

이 케이스에 대해 옳습니다. 나는 정확한 예를주지 않았다. 예제는 다음과 같아야합니다. /Contacts? $ filter = Phones/any (p : p/번호 eq '111-222-333-11') –

관련 문제