我正在构建一个概念验证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>
答案 0 :(得分:0)
简短的回答是你必须使用实现接口的类型,而不是接口本身。您可能已经发现,不能在接口上使用DataContract。
WCF序列化程序旨在使用具体类型,因为它必须在基于XML模式的类型中进行转换。 XML Schema没有.NET语言中定义的“接口”的概念。 soap标准使用XML Schema描述WSDL中的“类型”,因此任何以“知道”如何将XSD转换为适合该语言的结构的语言编写的客户端都可以使用它们。