Essayez d'ajouter un attribut XmlInclude à votre méthode:
[WebMethod]
[XmlInclude(typeof(Product))]
Public double CalculateTotal(IProduct product, int Quantity)
{
return product.Price * Quantity;
}
Modifier
Juste vous Incase se confondre avec mon utilisation de la classe "produit". Remplacez cette classe par n'importe quelle classe de votre assembly qui implémente IProduct, par ex.
[Serializable]
public class Product : IProduct
{
public Product(string name, double price)
{
this.Name = name;
this.Price = price;
}
public string Name { get; private set; }
public double Price { get; private set; }
}
public interface IProduct
{
string Name { get; }
double Price { get; }
}
....
[Web Method]
[XmlInclude(typeof(Product))]
Public double CalculateTotal(IProduct product, int quantity)
{
return product.Price * quantity;
}
Fondamentalement, lorsque vous passez une interface dans un webservice il ne peut pas trouver un schéma pour elle, donc si vous utilisez XmlInclude attribute et passer dans la classe concrète, il sera en mesure de reconnaître le type.
Envie de poster du code? –
Ce qui n'a pas été spécifié ici est de savoir s'il est toujours approprié d'exposer des interfaces dans le cadre d'une signature de méthode web? Cela ne semblerait pas, basé sur mon expérience personnelle. – Lisa