2009-06-05 25 views
2

私はWCFでアプリケーションをプロトタイプしており、コールバックを定義しようとしています 別のインターフェイスから派生したインターフェイスを持つ契約。 このようにすると、生成されたプロキシコード(svcutil.exeを使用)はベースの インターフェイスを表示せず、 をベースインターフェイスで定義されたメソッドを呼び出すときにサーバー上で "NotSupportedException"がスローされます。WCF契約継承コントラクト

また、私は、プロキシクラス の基本インターフェイスを手動で定義して、クライアント - >同じ動作でメソッドを実装できるようにしました。

なぜ動作しないのですか?

ご協力いただき、ありがとうございました。ここで

が私の契約の定義である:

namespace wcfContract 
{ 

    [ServiceContract(Namespace = "Test")] 
    public interface IPing 
    { 
     [OperationContract] 
     void Ping(); 
    } 

    public interface ITestCallback : IPing  
    //<-------------- IPing method not seen at all in proxy 
    { 
     [OperationContract] 
     void TestCB(); 
    } 

    [ServiceContract(Namespace = "Test", CallbackContract = 
     typeof(ITestCallback))] 
    public interface ITest : IPing 
    { 
     [OperationContract] 
     void Test(); 
    } 
} 

答えて

6

ITestCallbackインターフェイスに[ServiceContract]属性を追加する必要があります。

[ServiceContract] 
public interface ITestCallback : IPing 
{ 
    [OperationContract] 
    void TestCB(); 
} 

サービスクラスは、派生した契約(ITestCallback)を継承する必要があります。

public class Service1 : ITestCallback 
{ 
    ... 
} 

Web.configファイル内の対応するエンドポイントバインディングでは、正しい契約を指定する必要があります(下の「ws」のエンドポイントアドレスと同様)。

<services> 
    <service name="WcfService.Service1" behaviorConfiguration="WcfService.Service1Behavior"> 
    <!-- ITestCallback needs to be the contract specified --> 
    <endpoint address="ws" binding="wsHttpBinding" contract="WcfService.ITestCallback"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 

これは私のために働いた。それがあなたのために働くことを望みます。私はsvcutilを使用しませんでしたが、私はちょうどプロジェクトでサービス参照を追加して参照しました。

+0

ありがとうございます! –

2

あなたはITestCallbackに[のServiceContract]タグを追加してみましたか?

+0

私は役に立たなかった。 –

関連する問題