2011-08-08 5 views
1

WCF CTP2 mar2011がインストールされ、ブラウザからWebサービスにアクセスしようとしました。 (のhttp:// localhostを:99 /サービス/ MyDataService.svc /) 私はこの例外を取得:例外メッセージは '値はnullにはできません。パラメータ名:propertyResourceType '

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

任意のヘルプ?

その問題外Update.Foundが

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

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

Interresting事はすべてがWCF4でOKであるということです。このプロパティに関連しています。しかし、WCF CTP2marchには例外がスローされます。 ContactInfoType - enumです。

[IgnoreProperties( "Type")]は無効です。

Update2。調査した後、そのプロパティのセッター部分にスローされた例外を発見しました。

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

私はクリスタルボールを紛失しました。いくつかのコードを投稿してください。私があなたに伝えることができるのは、 'null 'を' PropertyResourceType'として 'ResourceProperty'コンストラクタに渡したのですが、そうではないはずです。申し訳ありません。 –

+0

Webサービスの本文を追加しました。そして、私はブラウザでこのWebサービスにアクセスしてアクセスしようとしています。 – DolceVita

答えて

1

ちょうど野生の推測が、それはthis issue次のようになります。

エンティティデータモデルは、タイプのDateTimeOffsetの性質 を持つエンティティタイプが含まれている場合は、ADO.NETデータサービスは、スロー未処理 ArgumentNullException。プロパティの種類をDateTimeに変更すると、 の例外がなくなります。

+0

モデルにDateTimeOffsetプロパティがありません。 – DolceVita

+0

WCF4を参照するとすべて問題ありません。エラーが表示されたらWCF4 CTP2を使用しますmarch2011 – DolceVita

2

.NET 4.5 WCF Data Servicesサービス(おそらくWCF Data Services 5.0を使用)で同じエラーが発生しました。 WCF Data Services 5.2.0(NuGet経由)にアップグレードした後、上記と同じタイプのプロパティenumであった問題プロパティに私を指摘したより有用なエラーメッセージが表示されました。

うわー、列挙型はまだWCF Data Servicesの5.2.0でサポートされていません - それはほとんどここの特徴に投票しています:(!投票あなたがそれを気にしている場合)http://data.uservoice.com/forums/72027-wcf-data-services-feature-suggestions

この問題を回避操作するための2つのオプションが現在ありません1つは、スカラープロパティを公開し、enumプロパティに[NotMapped]属性を使用し、同じ単一値でそれらを戻すことです。もう1つの選択肢は、enum型を置き換える "enum-like"エンティティクラスを作成することです。enum型は、enum値がDBに格納されるという利点があります。ここに例があります:

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"); 
} 
関連する問題