异常消息是'值不能为空。参数名称:propertyResourceType'

时间:2011-08-08 07:02:53

标签: c# wcf entity-framework-4.1 wcf-data-services

刚刚安装了WCF CTP2 mar2011并尝试通过浏览器访问Web服务。 (HTTP://本地主机:99 /服务/ MyDataService.svc /) 我得到了这个例外:

**The server encountered an error processing the request. The exception message is 'Value cannot be null. Parameter name: propertyResourceType'. See server logs for more details.** The exception stack trace is:
at System.Data.Services.Providers.ResourceProperty..ctor(String name, ResourcePropertyKind kind, ResourceType propertyResourceType)
at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMemberMetadata(ResourceType resourceType, IProviderMetadata workspace, IDictionary`2 knownTypes, PrimitiveResourceTypeMap primitiveResourceTypeMap)
at System.Data.Services.Providers.ObjectContextServiceProvider.PopulateMetadata(IDictionary`2 knownTypes, IDictionary`2 childTypes, IDictionary`2 entitySets)
at System.Data.Services.Providers.BaseServiceProvider.LoadMetadata()
at System.Data.Services.DataService`1.CreateProvider()
at System.Data.Services.DataService`1.HandleRequest()
at System.Data.Services.DataService`1.ProcessRequestForMessage(Stream messageBody)
at SyncInvokeProcessRequestForMessage(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

任何帮助?

更新。发现该问题与此属性有关

 [Required]
    public byte TypeId { get; set; }

    public ContactInfoType Type
    {
        get
        {
            return (ContactInfoType)TypeId;
        }
        set
        {
            TypeId = (byte)value;
        }
    }
有趣的是,在WCF4中一切正常。但它在WCF CTP2march中引发了一个exeption。 ContactInfoType - 是一个枚举。

[IgnoreProperties(“Type”)]无效。

UPDATE2。在调查了一个问题后发现该属性的setter部分抛出异常。

  public ContactInfoType Type
    {
        set
        {
            TypeId = (byte)value;
        }
    }

2 个答案:

答案 0 :(得分:2)

我在.NET 4.5 WCF数据服务服务中收到了同样的错误(可能是使用WCF Data Services 5.0)。升级到WCF数据服务5.2.0(通过NuGet)后,我收到了更多有用的错误消息,这些消息指向了我的问题属性,这是一个enum类型的属性,与上面相同。

哇,WCF数据服务5.2.0仍然不支持枚举 - 它是这里投票最多的功能:http://data.uservoice.com/forums/72027-wcf-data-services-feature-suggestions(如果你关心它就投票!)

目前有两种方法可以解决这个问题 - 一种是公开标量属性并在枚举属性上使用[NotMapped]属性,并使用相同的单值返回它们。另一种选择是创建一个“类似枚举”的实体类来替换枚举类型,它具有枚举值存储在数据库中的额外好处。这是一个例子:

public class Priority
{
    public Priority()
    {}

    protected Priority(short id, string name)
    {
        Id = id;
        Name = name;
    }

    public short Id { get; set; }
    public string Name { get; set; }

    public static readonly Priority Unknown = new Priority(0, "Unknown");
    public static readonly Priority Optional = new Priority(1, "Optional");
    public static readonly Priority Low = new Priority(2, "Low");
    public static readonly Priority Normal = new Priority(3, "Normal");
    public static readonly Priority High = new Priority(4, "High");
    public static readonly Priority Critical = new Priority(5, "Critical");
    public static readonly Priority Blocking = new Priority(6, "Blocking");
}

答案 1 :(得分:1)

只是一个疯狂的猜测,但可能是this issue

  

当实体数据模型包含具有属性的实体类型时   在DateTimeOffset类型中,ADO.NET数据服务抛出未处理的   ArgumentNullException。如果将属性类型更改为DateTime,   例外消失了。