使用WCF时
如何选择接口序列化的类型?
例如,CarA
类型在服务器中使用,它们通过WCF作为ICar
发送到客户端,客户端应该以{{1}}的形式接收它们。
CarB
答案 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实现,它可以是CarA
或CarB
。
现在在客户端,您将只有一个ICar
接口,不应该混淆应使用您的接口Icar
序列化哪种类型。您将只调用服务器端来获取服务而不是实现。
有关ServiceHost的更多信息
使用ServiceHost类配置和公开要使用的服务 不使用Internet信息时的客户端应用程序 用于公开的服务(IIS)或Windows激活服务(WAS) 服务。 IIS和WAS都与您的ServiceHost对象进行交互 代表