WCF Data Service 5.6 quick start

Takhion Stream picture Takhion Stream · Nov 28, 2013 · Viewed 10.7k times · Source

I have been trying to get a WCF Data Service server working for a few days now. I finally backed off today and just tried to do exactly what the quick-start shows.. nothing else.. and in completely fresh project. Surely that would work.

But it didn't.. it failed the same way as my other tests.

I am just following along with this example. Using Visual Studio 2013 for Web express and the hosting is using IIS Express. I have installed the WCF Tools version 5.6 such that Visual Studio has the WFC Data Service 5.6 template.

The gist of it is

create an ASP.Net Application Select MVC type, adding no folders for anything other than MVC and no unit tests, individual account authenticaion.

Add an ADO.Net Entity Data Model for the NorthWind database, called NorthwindEntities in web.config, importing all tables.

Add WCF Data Service 5.6 item, call it NorthWind.svc.

Change the NorthWind.svc.cs backing code to the following.

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;
        }
    }
}

Now it is ready to build and run.. it should work.. yes?

I run it, and navigate to the service.. I am greeted with the following complaint.

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

How am I to debug that? This is not the typical response when navigating to a page which generates an error in the application or to a page that does not exist. I get the feeling that the data.service system is generating this response.. that it actually started to process the request.. but failed for some obtuse reason.

I followed the instructions to a tee I thought, but apparently I missed something. I've been through the process step by step several times now to try to find what I might have skipped to no avail.


Update:

Aha.. under another similar question, they recommended adding verbose messages using config.UserVerboseErrors = true. This didn't make any difference to me.. but the alternative method of using attributes sure did! Decorating the class with [ServiceBehavior(IncludeExceptionDetailInFaults = true)], now yields this more descriptive error.

The server encountered an error processing the request. The exception message is 'Expression of type 'System.Data.Entity.Core.Objects.ObjectContext' cannot be used for return type 'System.Data.Objects.ObjectContext''. See server logs for more details. The exception stack trace is: blahblah

Answer

ChrisO picture ChrisO · Nov 28, 2013

It sounds like you're using Entity Framework 6 which hasn't been out for all that long. You need to perform some additional steps to get WCF Data Services 5.6 and EF 6 to behave together nicely.

You need to add the additional WCF Data Services Entity Framework Provider Nuget package and then instead of inheriting your service from DataService<T>, you inherit from EntityFrameworkDataService<T>.

Full steps are on the data services blog here: http://blogs.msdn.com/b/astoriateam/archive/2013/10/02/using-wcf-data-services-5-6-0-with-entity-framework-6.aspx