2012-03-15 20 views
0
[ServiceContract] 
[ServiceKnownType(typeof(DBReq))] 
public interface IDAService 
{ 


[DataContract] 
[KnownType(typeof(IDataParameterCollection))] 
public class DBReq : DBAccess 
{ 

    [DataMember] 
    public IDataParameterCollection DataParams 
    { 
    ... 

DataParamsがクライアント側でオブジェクトの型にデシリアライズするのはなぜですか?WCFの既知の型ではありません。

+0

たとえば、デシリアライズが行われ、不正なリクエスト例外がスローされないことを確認します。 – Rajesh

答えて

1

[KnownType(typeof(IDataParameterCollection))]が正しくありません。実装する型をKnownType属性に渡す必要があります。

私は間違っていないよ場合は、要求がそのようにサービスで受け取っているとき、着信メッセージは、特定のタイプに非直列化することができることを識別するためのフレームワークが起こることができるためKnownTypesをサーバ側にapplicalbeさ

public class MyType : IDataParameterCollection {...} 

[DataContract] 
[KnownType(typeof(MyType))] 
public class DBReq : DBAccess 
{ 

    [DataMember] 
    public IDataParameterCollection DataParams 
    { 
    ... 
+0

DataParameterCollection:ArrayList、IDataParameterCollection ---------パラメータhttp://tempuri.org/:reqをシリアル化しようとしているときにエラーが発生しました。 InnerExceptionメッセージが 'Type'でした。データコントラクト名 'ArrayOfanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays'のElco.DataAccess.DataParameterCollectionが必要ありません。 DataContractResolverを使用するか、既知の型のリストに静的に知られていない型を追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知の型のリストに追加します。 –

関連する問題