2009-03-13 7 views
3

私はこれのServiceContractWCFとサブクラス

[OperationContract(IsOneWay=true)] 
void ProcessMessage(Message message); 

を持っていると私はサービスメソッドにサブクラスを渡す場合には、これらのオブジェクトは

[DataContract] 
public class Message 
{ 
    [DataMember] 
    public long Id { get; set; } 

    [DataMember] 
    public string Body { get; set; } 
} 

[DataContract] 
public class ExtendedMessage : Message 
{  
    [DataMember] 
    public NameValueCollection AdditionalData { get; set; } 
} 

ウィルWCFを処理することができますか?または、基本クラスにない追加のプロパティをすべて削除しますか?

ExtendedMessage msg = new ExtendedMessage(); 
... 
ProcessMessage(msg); 
+0

あなたはこの効果を得ることができましたか?私はこれらの主題で長い間戦っています。 [OperationContract] HandleData(Baseベース)に含めることは可能ですか? SoapUIからBaseからいくつかのオブジェクトを送りますか?そして、もしC#が実際に基底でそれがいくつかのサブクラスのインスタンスを保持していることを知っているなら - 適切なメソッドも呼び出す(多態性など) –

答えて

3

私はあなたがKnownType属性を経由してExtendedMessageを指定しなかった場合、エラーになるだろうと思います。 KnownType経由でExtendedMessageについてWCFに伝えたら、データを失うことなく動作します。

ところで、KnownType属性は、実行時に可能な型のセットを返すメソッドを参照できるため、コンパイル時に可能な型のセットを知る必要はありません。

+0

私はこれらのサブジェクトと長い時間戦っています。 [OperationContract] HandleData(Baseベース)に含めることは可能ですか? SoapUIからBaseからいくつかのオブジェクトを送りますか?そして、もしc#が実際にそれがいくつかのサブクラスのインスタンスを保持しているという事実を知っているなら、それはまた適切なメソッドも呼び出す(多態性など) –

0

また、ServiceKnownType属性を使用してKnownType属性の範囲を絞り込むこともできます。 ServiceKnownType属性は、特定の操作またはサービス契約に適用できます。

関連する問題