Функциональная совместимость при возврате производного класса по базовому классу в WCF - PullRequest
3 голосов
/ 30 апреля 2010

У меня есть простой код:

   [DataContract]
   [KnownType(typeof(SpecialEvent))]
   public class Event
   {
     //data
   }

   [DataContract]
   public class SpecialEvent : Event
   {
     //data
   } 

   [ServiceContract]
   public interface IService
   {
        [OperationContract]
        List<Event> GetEvents();
   }

    [ServiceBehavior]
    public class Service : IService
    {
       public List<Event> GetEvents()
       {
           List<Event> events = new  List<Event>();
           events.Add(new Event());
           events.Add(new SpecialEvent());
           return events;
       }
    }

Я знаю, что это нормально работает, если wcf to wcf.

а как же совместимость?

это генерирует стандартный wsdl, и любой клиент может использовать сервис или нет?

1 Ответ

2 голосов
/ 30 апреля 2010

Да, это совместимо. Я написал службу, которая использует известные типы аналогичным образом, и несколько третьих сторон вызывают эту службу из различных клиентов, включая Java и PHP.

РЕДАКТИРОВАТЬ: WCFExtras

Одна вещь, которую я узнал, состоит в том, что не все клиенты, не являющиеся WCF, могут понимать WSDL по умолчанию WCF. Проблема в том, что WCF разбивает свой WSDL на несколько частей, а не использует один файл. Вы можете исправить это, используя что-то вроде WCFExtras, чтобы объединить WSDL обратно в один файл.

...