我有一个简单的数据模型,其中包含 3 个表(帐户、联系人和用户),它们具有以下关系:
用户 -> 帐户(1 - 多) 帐户 -> 联系人(多 - 1)
我通过 OData (v3) WCF 数据服务公开我的数据,该服务由使用 WCF 数据服务客户端库的 .NET 客户端使用。我使用添加服务实用程序生成客户端代理代码来调用数据服务。
客户端类中的所有方法都使用该类的单个DataServiceContext
对象来调用 Web 服务。IE:
DC.WhEntities svcClient = new DC.WhEntities(new Uri(BaseUrl));
我很难弄清楚为什么对服务的相同查询请求在第 6 次之后开始失败。我确实尝试了所有可能的方法来构造对数据服务的调用:
第一种方法:
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 数据服务的新手,我认为我可以从本教程中学习,但到目前为止,我得到的痛苦多于收获。