2012-08-17 57 views
1

我需要將我的OData服務更新到第三個版本。現在,我只使用NuGet存儲庫中的新庫和DataServiceConfiguration集屬性MaxProtocolVersion中的舊版庫更改爲V3。
可能這是不夠的?有人知道,爲了支持我的應用程序中的任何/所有過濾器,我必須做些什麼?如何使用任何/所有過濾器創建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

很可能您需要將WCF數據服務更新到5.0以支持v3 - 您可以下載它here

+0

我已經完成了這項工作。在Framework庫中,DataServiceProtocolVersion枚舉只有兩個值「V1」和「V2」。 – 2012-08-17 15:32:55

+0

@IgorVenzhyk - 你在安裝之後相應地修改了你項目中的引用?或者,您在安裝並重新啓動Visual Studio之後使用了「添加服務引用」功能? – 2012-08-17 15:34:44

+0

對於測試應用程序,我正在使用瀏覽器。在項目中所有引用正確 – 2012-08-17 15:36:39

0

這聽起來像市是單(不集合)在這種情況下,你不需要任何的,這樣的事情會工作得很好:

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

任何/所有僅適用於$過濾器中引用的集合。

+0

你是對的這種情況。我沒有給出正確的例子。 示例應該是這樣的: /Contacts?$ filter = Phones/any(p:p/Number eq'111-222-333-11') – 2012-08-20 09:58:05