4

例如,WCF 服务是否可以充当其他 WCF 服务的工厂?例如:

[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);
}

这需要调整已知类型吗?

所有接口都将预先定义并为客户端和服务所知。

4

2 回答 2

8
  1. 不。当您浏览网络时,您不会像在 C# 中那样处理引用,因此您将无法返回不可序列化的对象。即使这样,也只会遇到标记为DataMember的数据。

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

于 2012-06-01T12:59:22.827 回答
0

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

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

使用将接口传递给服务方法的能力需要服务知道要反序列化哪个实现。虽然我实际上没有尝试过,但我认为这行不通,但你可能会在这里让我感到惊讶:-)

于 2012-06-01T13:00:07.140 回答