inheritance - WCF 数据服务在对派生类型发出 OData 请求时给出 404

标签 inheritance wcf-data-services odata

我认为我缺少使 WCF 数据服务/OData/继承工作的技巧;我创建了几个简单的表格:

create table Super 
(
superID int IDENTITY(1,1) not null PRIMARY KEY, 
supername nvarchar(55),
)


create table sub
(
superID int not null,
extraData nvarchar(100),
FOREIGN KEY (superID) REFERENCES Super(superID)
)


insert Super values('abc')
insert Super values('def')
insert Super values('ghi')
insert Super values('jkl')
insert Super values('mno')


insert sub values(1, 'pqrstu')
insert sub values(3, 'vwxyz')

将它们拉入 edmx,用继承关系替换自动创建的关系,生成:

namespace WebApplication3
{
#region Contexts

public partial class Entities : ObjectContext
    {        ....    }

#endregion

#region Entities

[EdmEntityTypeAttribute(NamespaceName="Model", Name="sub")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class sub : Super
    {
    #region Factory Method
    ...
    #endregion
    #region Primitive Properties

    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public global::System.String extraData
    ...

    #endregion

    }


[EdmEntityTypeAttribute(NamespaceName="Model", Name="Super")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
[KnownTypeAttribute(typeof(sub))]
public partial class Super : EntityObject
    {
    #region Factory Method
    ...

    #endregion
    #region Primitive Properties


    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.Int32 superID
    ...


    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public global::System.String supername
    ...

    #endregion

    }

#endregion

}

设置服务以使用 V3:

namespace WebApplication3
    {
    public class WcfDs : DataService<Entities>
        {
        public static void InitializeService(DataServiceConfiguration config)
            {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
            }
        }
    }

查询 Supers 效果很好:

http://localhost:8384/WcfDs.svc/Supers

我尝试了很多 URL 来获取派生类型,但没有成功:

http://localhost:8384/WcfDs.svc/Supers/Model.sub/
http://localhost:8384/WcfDs.svc/Supers(1)/Model.sub/
http://localhost:8384/WcfDs.svc/Supers/WebApplication3.sub/
http://localhost:8384/WcfDs.svc/Supers(1)/WebApplication3.sub/
....

但我总是收到 404 资源未找到响应。我错过了什么?

最佳答案

诀窍是:

在项目属性中从使用 Visual Studio 开发服务器切换为使用本地 IIS。

至少,这在我的 VS 2010 环境中有效。

关于inheritance - WCF 数据服务在对派生类型发出 OData 请求时给出 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16790088/

相关文章:

mongodb - OData Jaydata - odata 更新请求返回错误 404(SAPUI5,节点)

gridview - 剑道 gridview 和 web api odata

Javascript 寄生继承

python - 防止从子类访问实例变量,而不影响基类

vb.net - 将 friend 类作为类型从公共(public)类传递到 friend 基类时出错

c# - 首先自定义 Entity Framework 代码

c# - 在 WCF 数据服务应用程序中迁移 EntityFramwork 6 和 VS 2013 后无法更新或删除

c# - 不是正确的<type>?

c# - 如何使用 OData 在 Dictionary<string, string> 上进行 $filter?

java - 从父类(super class)构造函数调用基类覆盖的方法