我有一个简单的数据模型,其中包含3个表(客户,联系人和用户),它们具有以下关系:


  用户->帐户(1-很多)帐户->联系人(很多-1)


我通过OData(v3)WCF数据服务公开数据,该数据由使用WCF数据服务客户端库的.NET客户端使用。我使用“添加服务”实用程序来生成客户端代理代码以调用数据服务。

客户端类中的所有方法都使用该类的单个DataServiceContext对象来调用Web服务。即:

DC.WhEntities svcClient = new DC.WhEntities(new Uri(BaseUrl));


我很难弄清楚的是为什么对服务的相同查询请求在第六次之后开始失败。我已经尝试了所有可能的方法来构造对数据服务的调用:

第一种方法:

DataServiceQuery<DC.User> users = svcClient.Users.Expand("Accounts");
QueryOperationResponse<DC.User> response = users.Execute() as QueryOperationResponse<DC.User>;
var user = response.FirstOrDefault(u => u.Id == long.Parse(key.ToString()));


第二种方法:

string queryString = string.Format("Users({0}L)?$expand=Accounts", key.ToString());
foreach (var user in response) {...}


上面的两个解决方案中的最后一条语句连续成功执行了6次后,开始失败并显示以下消息:

The response payload is a not a valid response payload. Please make sure that the top level element is a valid Atom element or belongs to 'http://schemas.microsoft.com/ado/2007/08/dataservices' namespace.

**StackTrace:**
   at System.Data.Services.Client.Materialization.ODataMaterializer.CreateODataMessageReader(IODataResponseMessage responseMessage, ResponseInfo responseInfo, Boolean projectionQuery, ODataPayloadKind& payloadKind)
   at System.Data.Services.Client.Materialization.ODataMaterializer.CreateMaterializerForMessage(IODataResponseMessage responseMessage, ResponseInfo responseInfo, Type materializerType, QueryComponents queryComponents, ProjectionPlan plan, ODataPayloadKind payloadKind)
   at System.Data.Services.Client.DataServiceRequest.Materialize(ResponseInfo responseInfo, QueryComponents queryComponents, ProjectionPlan plan, String contentType, IODataResponseMessage message, ODataPayloadKind expectedPayloadKind)
   at System.Data.Services.Client.QueryResult.ProcessResult[TElement](ProjectionPlan plan)
   at System.Data.Services.Client.DataServiceRequest.Execute[TElement](DataServiceContext context, QueryComponents queryComponents)


发生这种情况时,我的WCF数据服务刚刚停止工作并返回带有


  第1行第83列的错误:属性值中不允许使用转义的<

我不确定是否遗漏了任何基本信息,或者是否错误地构造了WCF数据服务客户端请求,或者WCF数据服务端是否存在不喜欢同一客户端多次请求相同内容超过6次的问题。

我已经花了几天时间,我想花3天以上的时间来解决这个问题。我是WCF数据服务的新手,我认为我可以从本教程中学到东西,但是到目前为止,我遇到的痛苦多于收获。

最佳答案

我遇到类似的问题,突然我的服务器启动了(可能是某些更新造成了这种情况,但原因未知),返回错误响应。如果我启动服务器,它会工作一段时间,可以说以正常方式响应少量请求,然后开始破坏OData提要的xml结构,导致<(十六进制值0x3C)是无效的属性字符。 Line 2, position 72. exception

解:

我通过遵循this feed解决了问题

如果已配置WCF跟踪,请确保已关闭logMessagesAtTransportLevel="false",否则您将遇到此问题。

10-04 22:24
查看更多