c# – WCF数据服务:尽管服务设置为v3,但MaxProtocolVersion设置
发布时间:2020-12-15 07:58:52 所属栏目:百科 来源:网络整理
导读:我遇到的问题是,当我尝试使用OfType()方法对我的odata服务进行 linq查询时,我收到一条错误消息,指出该请求对于版本2服务无效.我创建了WCF数据服务并将MaxProtocolVersion设置为v3. public class TestDirectorySearch : DataServiceTestDirectoryEntities{ pu
我遇到的问题是,当我尝试使用OfType()方法对我的odata服务进行
linq查询时,我收到一条错误消息,指出该请求对于版本2服务无效.我创建了WCF数据服务并将MaxProtocolVersion设置为v3.
public class TestDirectorySearch : DataService<TestDirectoryEntities> { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*",EntitySetRights.AllRead); config.SetEntitySetPageSize("*",50); config.UseVerboseErrors = true; config.DataServiceBehavior.MaxProtocolVersion = System.Data.Services.Common.DataServiceProtocolVersion.V3; } } 我的edmx有以下几行: <edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 当我尝试执行以下查询时,指出当MaxProtocolVersion小于’3.0’时,不支持“方法’OfType’.” from test in context.Tests.OfType<OrderableTest>() where test.TestRevisionId.Equals(mmt.RevisionId) select new { Reflex = test.ReflexTest,ShipTemp = (test.SpecimenTemperature == null) ? null : test.SpecimenTemperature.DisplayDescription }).FirstOrDefault(); 如果我检查上下文的MaxProtocolVersion,则将其设置为v2.在什么时候失败了?我该怎么做才能正确设置? 确切的错误: {“当MaxProtocolVersion小于’3.0’时,不支持’OfType’方法.”} 请求的堆栈跟踪: at System.Data.Services.Client.ResourceBinder.AnalyzeOfType(MethodCallExpression mce,DataServiceProtocolVersion maxProtocolVersion) at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce) at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.ALinqExpressionVisitor.VisitExpressionList(ReadOnlyCollection`1 original) at System.Data.Services.Client.ALinqExpressionVisitor.VisitMethodCall(MethodCallExpression m) at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce) at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.ResourceBinder.AnalyzeProjection(MethodCallExpression mce,SequenceMethod sequenceMethod,Expression& e) at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce) at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.ALinqExpressionVisitor.VisitExpressionList(ReadOnlyCollection`1 original) at System.Data.Services.Client.ALinqExpressionVisitor.VisitMethodCall(MethodCallExpression m) at System.Data.Services.Client.ResourceBinder.VisitMethodCall(MethodCallExpression mce) at System.Data.Services.Client.ALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.DataServiceALinqExpressionVisitor.Visit(Expression exp) at System.Data.Services.Client.ResourceBinder.Bind(Expression e,DataServiceContext context) at System.Data.Services.Client.DataServiceQueryProvider.Translate(Expression e) at System.Data.Services.Client.DataServiceQuery`1.Translate() at System.Data.Services.Client.DataServiceQuery`1.Execute() at System.Data.Services.Client.DataServiceQuery`1.GetEnumerator() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) at System.Data.Services.Client.DataServiceQueryProvider.ReturnSingleton[TElement](Expression expression) at System.Data.Services.Client.DataServiceQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source) at TDMixBLL.TestDirectoryServiceHandler.PopulateOrderableTestInfo(MonitoredMixTest mmt) in C:DevTDMixANSR - TDMixTDMix2TDMixBLLTDMixBLLTestDirectoryServiceHandler.cs:line 161 at TDMixBLL.TestDirectoryServiceHandler.PopulateTestInfo(MonitoredMixTest test) in C:DevTDMixANSR - TDMixTDMix2TDMixBLLTDMixBLLTestDirectoryServiceHandler.cs:line 124 at TDMixBLL.TestDirectoryServiceHandler.GetTest(Int64 testRevisionId) in C:DevTDMixANSR - TDMixTDMix2TDMixBLLTDMixBLLTestDirectoryServiceHandler.cs:line 112 at TDMixBLL.TestDirectoryServiceHandler.PopulateTests(List`1 testsToPopulate) in C:DevTDMixANSR - TDMixTDMix2TDMixBLLTDMixBLLTestDirectoryServiceHandler.cs:line 66 at TDMix2.Tests.TestRetrievalTests.TestPopulate() in C:DevTDMixANSR - TDMixTDMix2TDMix2.TestsTestRetrievalTests.cs:line 38 解决方法
这是客户端上的错误. DataServiceContext必须用V3构造,以支持V3功能(如OfType). DataServiceContext有一个新的构造函数重载,它接受MaxProtocolVersion参数.确保使用它并传入V3.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |