2012-03-21 65 views
0

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

示例服务

[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

简短的回答是你必须使用一个实现了接口,而不是接口本身的类型。正如您可能已经发现的那样,您无法在界面上使用DataContract。

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

相关问题