2012-03-21 17 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シリアライザは、具体的な型を使用するように設計されています。なぜなら、WCFシリアライザはXMLスキーマベースの型で変換する必要があるからです。 XMLスキーマには、.NET言語で定義されている「インターフェース」の概念はありません。 SOAP標準は、XMLスキーマを使用するWSDLの「型」を記述します。そのため、XSDをその言語用の適切な構造に変換する方法を「知っている」どの言語で書かれたクライアントでも使用できます。

関連する問題