首先,我想提前感谢您的建议和指导。我是Microsoft .Net堆栈的新手。
我创建了一个非常简单的WCF服务,该服务托管在Azure网站上,应该为Azure SQL数据源创建端点。
在VS 2013中,我首先为Azure SQL创建了一个ADO.NET EDM点:
namespace WorkOrderIntegration
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class WorkOrderEntities : DbContext
{
public WorkOrderEntities()
: base("name=WorkOrderEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<WorkOrder> WorkOrders { get; set; }
}
}
然后我将[WCF Data Service 5.6]添加到项目中,只对InitializeService方法进行了一些更改:
namespace WorkOrderIntegration
{
//Added my Entity to the class declaration
public class WorkOrderService : DataService<WorkOrderEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
//Added these next 2 lines
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}
}
然后我将我的项目发布到Azure托管的website并导航到/WorkOrderService.svc/WorkOrders,我收到HTTP 500.0错误。
一切都很好,我已阅读了几篇使用同一过程取得成功的文章。我们将非常感谢您提供的任何帮助或指导。谢谢。
答案 0 :(得分:0)
经过几天的挫折和谷歌搜索后,我找到了如下所述的解决方案:
我首先添加了ServerBehavior标志以获取实际错误。
// Added the below line
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
namespace WorkOrderIntegration
{
public class WorkOrderService : DataService<WorkOrderEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}
}
然后我收到了真正的错误:
The exception message is 'Expression of type 'System.Data.Entity.Core.Objects.ObjectContext' cannot be used for return type 'System.Data.Objects.ObjectContext''.
经过一些搜索后,发现此错误是由于尝试在WCF Data Service 5.6
之上创建Entity Framework 6+
而导致的。因此,this文章中描述的解决方案是在Visual Studio中安装WCF Data Services EntityFramework Provider模块。
进行这些更改后,我不再获得神秘的通用HTTP 500错误。