WCF:如何选择接口将序列化为哪种类型?

时间:2011-12-05 01:32:02

标签: wcf serialization .net-4.0

使用WCF时 如何选择接口序列化的类型? 例如,CarA类型在服务器中使用,它们通过WCF作为ICar发送到客户端,客户端应该以{{1​​}}的形式接收它们。

CarB

3 个答案:

答案 0 :(得分:1)

您可以使用IDispatchMessageFormatter

按实现自定义扩展程序查看自定义回复消息

如果有帮助,请尝试此链接 IDispatchMessageFormatter – How to customize reply Messages on the server side

答案 1 :(得分:1)

“哪种类型的接口将被序列化为” - 这没有任何意义。如果您将CarA发送给您的客户,客户将收到CarA's。

我认为您可能询问如何告诉WCF您的服务合同包含从其他类型派生的类型。为此,您可以使用ServiceKnownTypeAttribute

<强>更新

如果要在服务操作中返回一种ICar,则需要指定端点上可用的具体类型。您可以使用ServiceKnownTypeAttribute这样执行此操作:

[ServiceKnownType(typeof(CarA))]
[ServiceKnownType(typeof(CarB))] 
[ServiceContract]
public interface ICarManager
{
   [OperationContract]
   ICar GetMyCar(int userID);
}

答案 2 :(得分:1)

从您的服务器端,您只能公开unique endpoint,因此您只会将一个端点公开为ICar,然后您将通过ServiceHost选择要托管的ICar实现,它可以是CarACarB

现在在客户端,您将只有一个ICar接口,不应该混淆应使用您的接口Icar序列化哪种类型。您将只调用服务器端来获取服务而不是实现。

有关ServiceHost的更多信息

  

使用ServiceHost类配置和公开要使用的服务   不使用Internet信息时的客户端应用程序   用于公开的服务(IIS)或Windows激活服务(WAS)   服务。 IIS和WAS都与您的ServiceHost对象进行交互   代表