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


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

    [DataMember] 
    public IDataParameterCollection DataParams 
    { 
    ... 

Pourquoi DataParams désérialise-t-il le type d'objet de mon côté client?Les types connus de WCF ne fonctionnent pas

+0

Si je ne suis pas mal KnownTypes sont applicalbe à côté serveur pour le cadre d'identifier que le message entrant peut être désérialisée à un type spécifique peut se produire lorsque la demande est reçu par un service si que la désérialisation a lieu et ne déclenche pas une exception de demande incorrecte – Rajesh

Répondre

1

Votre [KnownType(typeof(IDataParameterCollection))] est incorrect. Vous devez transmettre les types d'implémentation à l'attribut KnownType.

Par exemple

public class MyType : IDataParameterCollection {...} 

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

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

public class DataParameterCollection: ArrayList, IDataParameterCollection --------- Une erreur s'est produite lors de la tentative de sérialisation du paramètre http://tempuri.org/:req. Le message InnerException était 'Type' Elco.DataAccess.DataParameterCollection 'avec le nom du contrat de données' ArrayOfanyType: http: //schemas.microsoft.com/2003/10/Serialization/Arrays 'n'est pas prévu. Envisagez d'utiliser DataContractResolver ou ajoutez des types non connus de manière statique à la liste des types connus, par exemple, en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus transmis à DataContractSerializer. '. –

Questions connexes