WCF在WSDL中定义接口契约

时间:2012-03-21 16:05:33

标签: wcf soap

我正在构建一个概念验证WCF服务,并且故意构建所有接口以避免在必要时提供任何具体实现。我想将生成的合同(包括消息定义)发送给另一个团队,以开始构建我正在构建的合同,但消息参数不是序列化的,除非我提供了一个用DataContractAttribute修饰的类。有没有办法让我继续使用松散耦合的接口来定义我的合同,或者我是否需要使用类来构建我的所有消息?

示例服务

[ServiceContract]
public interface ITestService
{
  [OperationContract]
  ITestResponse TestOperation(ITestRequest request);
}

public interface ITestRequest
{
  string Message { get; set; }
}

public interface ITestResponse
{
  bool Success { get; set; }
}

示例XSD定义

<xs:element name="TestOperation">
  <xs:complexType>
    <xs:sequence>
      <!--I want this to be a reference to a complex type with definition of it's members-->
      <xs:element minOccurs="0" name="result" nillable="true" type="xs:anyType"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:0)

简短的回答是你必须使用实现接口的类型,而不是接口本身。您可能已经发现,不能在接口上使用DataContract。

WCF序列化程序旨在使用具体类型,因为它必须在基于XML模式的类型中进行转换。 XML Schema没有.NET语言中定义的“接口”的概念。 soap标准使用XML Schema描述WSDL中的“类型”,因此任何以“知道”如何将XSD转换为适合该语言的结构的语言编写的客户端都可以使用它们。