【问题标题】:Silverlight WCF service consuming inherited types in datacontractSilverlight WCF 服务使用数据合同中的继承类型
【发布时间】:2010-01-24 01:20:13
【问题描述】:

我正在尝试在 silverlight 中使用 WCF 服务...

我所做的是为我的数据合同创建两个单独的程序集...

  1. 包含我的所有类型的程序集都标记有针对 .Net 3.5 构建的数据协定

  2. 链接到第一个程序集中的文件的 Silverlight 程序集。

这意味着我的 .Net 应用程序可以引用程序集 1 和我的 silverlight 应用程序程序集 2。这工作正常,我可以跨服务进行通信。

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

IFlight - 适用于所有类型航班的界面。

BaseFlight : IFlight - baseflight 飞行实现 IFlight

AdhocFlight : BaseFlight, IFlight - 一个 adhoc 航班继承自 baseflight 并实现了 IFlight。

我可以成功地跨服务转移基础航班。但是,我确实需要能够通过接口传输 IFlight 的对象,因为我想要一个可以传输多种飞行类型的操作合同......

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

...我认为应该有效吗?

但是我得到了错误:

“服务器没有提供有意义的回复;这可能是由于合同不匹配、会话过早关闭或内部服务器错误造成的。”

任何想法都将不胜感激。

【问题讨论】:

  • 您是否有理由手动创建具有相应类型的 Silverlight 程序集,而不是使用 slsvcutil.exe 或自动为您生成所有类型的“添加服务引用”功能?

标签: wcf silverlight serialization datacontract


【解决方案1】:

你说BaseFlight 有效;您的基类是否为已知类型命名?

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

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

【讨论】:

  • [ServiceKnownType] 是关键 - 我将它添加到服务合同中。
【解决方案2】:

我认为您想做的事情在“普通”.NET WCF 中是可能的。这是一个关于在 WCF 服务中传递接口的问题:
Passing Interface in a WCF Service?

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

【讨论】:

  • 嗨,我很高兴地宣布它确实有效:) 我将我的服务归结为如下: [ServiceKnownType(typeof(Flight))] [ServiceKnownType(typeof(FlightLiveOps))] [ServiceKnownType(typeof(FlightScheduled) ))] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 公共类 DispatchService
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多