在WCF中通过基类返回派生类时的互操作性

时间:2010-04-30 09:17:13

标签: c# wcf web-services wsdl interop

我有一些简单的代码:

   [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为wcf,它的工作正常。

但互操作性呢?

是生成标准的wsdl,任何客户端都可以使用该服务吗?

1 个答案:

答案 0 :(得分:2)

是的,这是可互操作的。我编写了一个以类似方式使用已知类型的服务,并且有几个第三方从各种客户端调用该服务,包括Java和PHP。

编辑:WCFExtras

我学到的一件事是,并非所有非WCF客户端都能理解WCF的默认WSDL。问题是WCF将其WSDL分成几个部分而不是使用单个文件。您可以通过使用WCFExtras之类的东西将WSDL合并回单个文件来解决此问题。