一个WCF服务可以返回另一个吗?

时间:2012-06-01 12:53:19

标签: c# wcf

例如,WCF服务可以充当其他WCF服务的工厂吗? E.g:

[ServiceContract(Namespace = "Foo")]
interface IThing
{
    [OperationContract]
    void DoSomething();
}

[ServiceContract(Namespace = "Foo")]
interface IMakeThings
{
    [OperationContract]
    IThing Create(string initializationData);
}

类似地,接口可以将另一个接口作为参数吗?

[ServiceContract(Namespace = "Foo")]
interface IUseThings
{
    [OperationContract]
    void UseThing(IThing target);
}

这是否需要调整已知类型?

所有接口都是预先定义的,并且客户端和服务都知道。

2 个答案:

答案 0 :(得分:8)

  1. 没有。当你浏览网页时,你不会像在C#中那样处理引用,因此你将无法返回一个不可序列化的对象。即使这样,也只会出现标记为 DataMember 数据

  2. 是。您必须调整已知类型,但同样,这将是 DataContract 的接口,而不是 OperationContract

答案 1 :(得分:0)

我不认为这是可能的。当您在接收或返回对象的WCF服务上调用方法时,实际发生的是该对象被序列化并且序列化表单来回传递。

这就是为什么在客户端你没有得到DataContract - 属性类的“全面”实现,而是一个只包含标记为序列化的属性的存根。你甚至没有得到这些方法。 WCF服务归因为ServiceContract,而不是DataContract,因此根本不起作用。

使用将接口传递给服务方法的能力要求服务知道要反序列化哪个实现。虽然我没有尝试过,但我认为这不会起作用,但你可能会在这里给我一些惊喜: - )