que tienen la siguiente:WCF: Interfaces, Generics y ServiceKnownType
[ServiceContract]
[ServiceKnownType(typeof(ActionParameters))]
[ServiceKnownType(typeof(SportProgram))]
[ServiceKnownType(typeof(ActionResult<SportProgram>))]
public interface ISportProgramBl
{
[OperationContract]
IActionResult<ISportProgram> Get(IActionParameters parameters);
}
Cuando ejecuto el método Get me sale el siguiente error:
There was an error while trying to serialize parameter http://tempuri.org/:GetResult . The InnerException message was 'Type 'PPS.Core.DomainModel.Support.Action.ActionResult`1[ [PPS.Core.DomainModel.SportProgram.ISportProgram, PPS.Core.DomainModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' with data contract name 'ActionResultOfanyType: http://schemas.datacontract.org/2004/07/PPS.Core.DomainModel.Support.Action ' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'. Please see InnerException for more details.
De este error Puedo ver que lo que pueda resuelve ActionResult pero no puede resolver ISportProgram aunque tengo ServiceKnownType (typeof (ActionResult < SportProgram>)) en mi interfaz de servicio ...
: Este es el talón de referencia que se genera es similar al siguiente, por lo que se puede ver que los tipos conocidos están siendo llevados a través correctamente:
[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);
}
¿Por qué es esto va mal ???? Tenga en cuenta que está recibiendo el servicio WCF correctamente ... pero arroja la excepción cuando se devuelve el resultado.
Por último ActionResult se parece a esto:
public interface IActionResult<T>
{
T Result { get; set; }
}
Saludos Anthony
El tipo 'ActionResult' que 'Serializer' espera es diferente del tipo' ActionResult 'proporcionado en' ServiceKnownType'! –
Lightman