WCF: Interfaces, Generics und ServiceKnownType

Habe ich Folgendes:

[ServiceContract]
[ServiceKnownType(typeof(ActionParameters))]
[ServiceKnownType(typeof(SportProgram))]
[ServiceKnownType(typeof(ActionResult<SportProgram>))]
public interface ISportProgramBl  
{
    [OperationContract]
    IActionResult<ISportProgram> Get(IActionParameters parameters);
}

Wenn ich das Cmdlet Get-Methode erhalte ich die folgende Fehlermeldung:

Es wurde ein Fehler beim serialisieren der parameter http://tempuri.org/:GetResult. Die InnerException-Nachricht war " der Typ 'PPS.Core.DomainModel.Unterstützung.Aktion.ActionResult`1[ [PPS.Core.DomainModel.SportProgram.ISportProgram, PPS.Core.DomainModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' mit Daten-Vertrag name 'ActionResultOfanyType: http://schemas.datacontract.org/2004/07/PPS.Core.DomainModel.Support.Action' ist nicht zu erwarten. Fügen Sie alle Arten nicht bekannt ist statisch in der Liste der bekannten Typen - Z. B. durch die Verwendung der KnownTypeAttribute-Attribut oder indem Sie Sie der Liste der bekannten Typen DataContractSerializer übergeben.'. Bitte sehen InnerException für mehr details.

Diesen Fehler kann ich sehen, dass Sie es beheben können, ActionResult, aber es nicht lösen können ISportProgram, obwohl ich ServiceKnownType(typeof(ActionResult < SportProgram >)) auf meine service-Schnittstelle...

Hinweis: dies ist die Referenz-stub, generiert wird, sieht wie folgt aus, so kann ich sehen, dass die bekannten Arten gebracht wird, über richtig:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="SportProgramStb.ISportProgramBl")]
public interface ISportProgramBl {

    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISportProgramBl/Get", ReplyAction="http://tempuri.org/ISportProgramBl/GetResponse")]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(PPS.Core.DomainModel.SportProgram.SportProgram))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(PPS.Core.DomainModel.Support.Action.ActionParameters))]
    [System.ServiceModel.ServiceKnownTypeAttribute(typeof(PPS.Core.DomainModel.Support.Action.ActionResult<PPS.Core.DomainModel.SportProgram.SportProgram>))]
    object Get(object parameters);
}

Warum ist das denn falsch?????? Hinweis die immer über den WCF-Dienst korrekt... aber es wirft die Ausnahme, wenn das Ergebnis zurückgegeben wird.

Schließlich ActionResult sieht wie folgt aus:

public interface IActionResult<T> 
{
    T Result { get; set; } 
}

Cheers
Anthony

  • Der Typ ActionResult<ISportProgram> dass Serializer erwartet unterscheidet sich von der Art ActionResult<SportProgram> in ServiceKnownType!
InformationsquelleAutor vdh_ant | 2009-09-03
Schreibe einen Kommentar