我有一个简单的数据模型,包含3个表(帐户,联系人和用户),具有以下关系:
用户 - >帐户(1 - 多)帐户 - >联系(许多 - 1)
我通过OData(v3)WCF数据服务公开我的数据,该服务由使用WCF数据服务客户端库的.NET客户端使用。我使用Add Service实用程序生成客户端代理代码以调用数据服务。
客户端类中的所有方法都使用类的单个DataServiceContext
对象来调用Web服务。即:
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数据服务刚停止工作并返回带
的响应第83行第1行的错误:未转义为'&lt;'不允许在属性值中使用。
我不确定我是否遗漏了任何基本内容,或者我是否错误地构建了WCF数据服务客户端请求,或者WCF数据服务端是否有某些内容不喜欢同一客户端请求更多内容超过6次。
我已经花了几天时间,我想要3天以上的时间来解决这个问题。我是WCF数据服务的新手,我以为我可以从这个教程中学习,但到目前为止,我得到的痛苦多于获得。
答案 0 :(得分:3)
我遇到类似的问题,突然我的服务器启动(可能是一些更新造成了这个,但原因未知)返回错误的响应。如果我启动我的服务器它可以工作一段时间,让我们说以正常方式响应几个请求然后开始破坏OData提要的xml结构,导致<
,十六进制值0x3C
,是无效的属性字符。 Line 2, position 72. exception
。
解决方案:
我按照this feed
解决了这个问题如果您配置了WCF跟踪,请确保logMessagesAtTransportLevel="false"
已关闭,否则您将遇到此问题。
答案 1 :(得分:0)
我尝试将logMessagesAtTransportLevel设置为false并仍然出错。
然后我记得在我发生装配冲突之前看到这个问题。我去创建了一个全新的服务,这解决了我的问题,即使我在我的客户端上将logMessagesAtTransportLevel设置为true。这确保了问题就在于服务。
虽然我的解决方案解决了我的问题,但我仍然不知道确切的问题,而且我已经没时间找到它了。但是,很高兴看到人们愿意提供帮助,我真的很感激这种努力。
再次感谢大家的帮助。
Qster123。