首页 文章

Silverlight WCF服务消耗datacontract中的继承类型

提问于
浏览
1

我试图在Silverlight中使用WCF服务......

我所做的是为我的datacontracts创建两个单独的程序集......

  • 包含标有数据 Contract 的所有类型的程序集都是针对.Net 3.5构建的

  • 一个Silverlight程序集,它链接到第一个程序集中的文件 .

这意味着我的.Net应用程序可以引用程序集1和我的silverlight app程序集2.这很好用,我可以在整个服务中进行通信 .

当我尝试转移继承的分类时会出现问题 . 我有以下课程结构......

IFlight - 所有类型航班的界面 .

BaseFlight:IFlight - 基线飞行实施IFlight

AdhocFlight:BaseFlight,IFlight - 一个adhoc飞行继承自baseflight并且还实现了IFlight .

我可以成功转移整个服务的基本航班 . 但是我真的需要能够在界面上传输IFlight的对象,因为我想要一个可以传输多种类型的航班的操作 Contract ......

public IFlight GetFlightBooking()
{
    AdhocFlight af = new AdhocFlight();
    return af;
}

......我认为应该工作吗?

但是我得到错误:

“服务器没有提供有意义的回复;这可能是由 Contract 不匹配,过早的会话关闭或内部服务器错误引起的 . ”

任何想法,将不胜感激 .

3 回答

  • 1

    我认为你想要做的是"normal" .NET WCF . 这是一个讨论在WCF服务中传递接口的问题:
    Passing Interface in a WCF Service?

    但我很怀疑这是否适用于Silverlight . 至少可以说,SL中的WCF支持是粗略的 . 我没有尝试过 . 我可能错了 .

  • 4

    你说 BaseFlight 有效;您的基类名称是已知类型吗?

    [DataContract]
    [KnownType(typeof(AdhocFlight))]
    class BaseFlight : IFlight {...}
    

    您可能还想查看[ServiceKnownType] . 一般来说,WCF不会喜欢基于接口的方法( IFlight ),因为它想要准确地知道它对数据的期望(de)序列化;我希望它可以与上面的工作正常,并在API上使用 BaseFlight .

  • 0

    这可能与在WCF中序列化通用接口类型的错误有关,也可能与此无关 .

    http://connect.microsoft.com/VisualStudio/feedback/details/391260/executionengineexception-thrown-from-datacontractserializer-with-ilist-t

    如果这与您的问题有关,您会很高兴听到它已在.net 4.0中修复

相关问题