【问题标题】:WCF Data Service 5.6 quick startWCF 数据服务 5.6 快速入门
【发布时间】:2013-12-13 20:18:53
【问题描述】:

我已经尝试让 WCF 数据服务服务器工作几天了。 我今天终于退缩了,只是尝试完全按照快速启动显示的内容.. 没有别的.. 并且在全新的项目中。这肯定行得通。

但它并没有......它和我的其他测试一样失败了。

我只是关注这个example。使用 Visual Studio 2013 for 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 系统正在生成此响应..它实际上开始处理请求..但由于某种迟钝的原因失败了。

我按照指示找到了一个我认为的发球台,但显然我错过了一些东西。 我现在已经一步一步地完成了这个过程,试图找到我可能跳过的内容。


更新:

啊哈.. 在另一个类似的问题下,他们建议使用 config.UserVerboseErrors = true 添加详细消息。这对我没有任何影响..但是使用属性的替代方法确实可以!使用 [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 装饰类,现在会产生这个更具描述性的错误。

服务器在处理请求时遇到错误。例外 消息是'类型的表达 'System.Data.Entity.Core.Objects.ObjectContext' 不能用于 返回类型“System.Data.Objects.ObjectContext”。查看服务器日志 更多细节。异常堆栈跟踪是:blahblah

【问题讨论】:

    标签: c# wcf wcf-data-services


    【解决方案1】:

    听起来您正在使用很久没有推出的 Entity Framework 6。您需要执行一些额外的步骤以使 WCF 数据服务 5.6 和 EF 6 能够很好地协同工作。

    您需要添加额外的 WCF 数据服务实体框架提供程序 Nuget 包,然后从 DataService&lt;T&gt; 继承您的服务,而不是从 EntityFrameworkDataService&lt;T&gt; 继承。

    完整步骤在此处的数据服务博客上:http://blogs.msdn.com/b/astoriateam/archive/2013/10/02/using-wcf-data-services-5-6-0-with-entity-framework-6.aspx

    【讨论】:

      【解决方案2】:

      是的,谢谢。你的答案是正确的,克里斯。在启用详细消息传递的修饰版本后,我终于找到了问题,并获得了有关链接到问题的对象的额外详细信息。

      所以我发现了问题并修复了它,或者至少我现在可以使用快速入门指南让它工作。使用我自己的数据库仍然有点松懈.. 当我知道我在数据库中有项目时返回一个空集.. 但至少我现在有工作的展览-A 来比较以找到问题。 (啊哈!在那里也发现了问题,我忘记为我的非北风数据库添加到 web.config 的实体连接——所以现在一切正常!)

      无论如何,第一个体面的线索是跟随错误消息(直到我使用类属性启用详细消息传递后才显示),发现这个问题实际上是 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

      【讨论】:

        【解决方案3】:

        今天 2014 年 6 月 7 日安装 alpha2 “Install-Package Microsoft.OData.EntityFrameworkProvider -Pre”。此外,Microsoft.Data.Services 版本必须为 5.6.0.0。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多