WCF数据服务5.6快速入门

时间:2013-11-27 23:34:37

标签: c# wcf wcf-data-services

我一直在努力让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

3 个答案:

答案 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

http://blogs.msdn.com/b/astoriateam/archive/2013/10/02/using-wcf-data-services-5-6-0-with-entity-framework-6.aspx

答案 2 :(得分:1)

今天安装alpha2 2014年6月7日&#34;安装包Microsoft.OData.EntityFrameworkProvider -Pre&#34;。 Microsoft.Data.Services版本也必须是5.6.0.0。