2012-03-21 60 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轉換爲該語言的適當構造的語言編寫的任何客戶端使用。

相關問題