我一直在努力让WCF数据服务服务器工作几天。 我终于在今天退缩了,只是尝试完全按照快速启动的方式展示......没有其他......以及完全新鲜的项目。肯定会有效。
但它没有......它的失败方式与我的其他测试相同。
我只是跟着这个example。使用Visual Studio 2013进行Web Express和托管正在使用IIS Express。 我已经安装了WCF工具5.6版,以便Visual Studio具有WFC数据服务5.6模板。
它的要点是
创建ASP.Net应用程序选择MVC类型,不为MVC以外的任何内容添加任何文件夹,也不添加单元测试,个人帐户认证。
为NorthWind数据库添加ADO.Net实体数据模型,在web.config中称为NorthwindEntities,导入所有表。
添加WCF数据服务5.6项,将其命名为NorthWind.svc。
将NorthWind.svc.cs支持代码更改为以下内容。
using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
namespace StackOverflowApp
{
public class NorthWindService : DataService<NorthwindEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead | EntitySetRights.WriteMerge | EntitySetRights.WriteReplace );
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead| EntitySetRights.AllWrite);
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}
}
现在它已准备好构建并运行..它应该工作..是吗?
我运行它,然后导航到服务..我接到以下投诉。
<div id="content">
<p class="heading1">Request Error</p>
<p>The server encountered an error processing the request. See server logs for more details.</p>
</div>
我如何调试? 当导航到在应用程序中生成错误的页面或不存在的页面时,这不是典型的响应。我感觉data.service系统正在生成这个响应..它实际上开始处理请求..但由于一些钝的原因而失败。
我按照说明按照我的想法发球,但显然我错过了一些东西。 我现在已经多次一步一步地完成这个过程,试图找到我可能没有用到的东西。
更新
Aha ..在另一个类似问题下,他们建议使用config.UserVerboseErrors = true
添加详细消息。这对我没有任何影响..但使用属性的替代方法确实做到了!使用[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
修饰课程,现在会产生更具描述性的错误。
服务器在处理请求时遇到错误。例外 消息是'表达式 'System.Data.Entity.Core.Objects.ObjectContext'不能用于 返回类型'System.Data.Objects.ObjectContext''。请参阅服务器日志 更多细节。异常堆栈跟踪是:blahblah
答案 0 :(得分:10)
听起来你正在使用的实体框架6已经很久没有了。您需要执行一些额外的步骤才能使WCF Data Services 5.6和EF 6能够很好地协同工作。
您需要添加其他WCF数据服务实体框架提供程序Nuget包,然后从DataService<T>
继承您的服务,而不是继承EntityFrameworkDataService<T>
。
此处的数据服务博客上有完整步骤:http://blogs.msdn.com/b/astoriateam/archive/2013/10/02/using-wcf-data-services-5-6-0-with-entity-framework-6.aspx
答案 1 :(得分:3)
是的,谢谢。你的答案是正确的克里斯。在我启用详细消息的装饰版本后,我终于找到了问题,并获得了关于链接到对象的额外细节问题。
所以我找到了问题并修复了它,或者至少我现在可以使用快速入门指南来解决它。使用我自己的数据库仍然是一个小小的squirley ..当我知道我在数据库中有项目时返回一个空集..但至少我现在有工作展览-A进行比较以找到问题。 (啊哈!在那里发现了问题,我忘了为我的非northwind数据库添加了web.config的权限连接 - 所以它现在全部工作!)
无论如何,第一个体面的线索是关注错误消息(直到我使用class属性启用详细消息后才显示),发现这个问题实际上与WCF与EntityFramework 6的接口有关。(有我没有升级到版本6我可能不会有问题)
https://entityframework.codeplex.com/workitem/896
然后,我搜索了WCF 5.6和EntityFramework6的问题。和whalla ..有一个WCF的alpha版本可以解决这个问题。
请注意,如果您逐字按照说明操作,则仍然存在问题(或者对我而言)。获取alpha2而不是alpha1,因为它修复了链接错误。即。
Install-Package Microsoft.OData.EntityFrameworkProvider -Version 1.0.0-alpha2 -Pre
答案 2 :(得分:1)
今天安装alpha2 2014年6月7日&#34;安装包Microsoft.OData.EntityFrameworkProvider -Pre&#34;。 Microsoft.Data.Services版本也必须是5.6.0.0。