0

サービス コントラクトを実装するクラスがあります。このクラスから派生し、別のサービス コントラクトを実装する別のクラス

Class A: a.IA
{

}

Class B: A, b.IB
{

}

コントラクト IB のエンドポイントを公開するにはどうすればよいですか?

私が試したエンドポイント:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.A1" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.B1" />
</service>

これを行うと、エラーが発生します

サービス 'B' は複数の ServiceContract タイプを実装しており、構成ファイルでエンドポイントが定義されていません。WebServiceHost は既定のエンドポイントを設定できますが、サービスが単一の ServiceContract のみを実装している場合に限ります。単一の ServiceContract のみを実装するようにサービスを変更するか、構成ファイルで明示的にサービスのエンドポイントを定義してください。

前もって感謝します。

編集

上記の構成にタイプミスがありました。

    <service name="B">
       <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
       <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
    </service>

これに使用しているテンプレートは WCF Rest テンプレート 4.0 です (違いがある場合)

4

1 に答える 1

0

サービスを実装するサービス クラスはB- 私が知る限り、あなたはそれを正しく使用しています。

このサービス クラスが実装するコントラクトはIB- しかし、実際には構成には表示されません。

これを試して:

<service name="B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>

エンドポイントのコントラクトは、サービス メソッドを定義するサービスインターフェイス(通常) を示す必要があります。そのインターフェイスには、[ServiceContract]属性が適用されている必要があります。

わかりました-それはタイプミスであり、あなたのコントラクトは正しいです-しかし、私の質問は、コントラクトのa.andb.プレフィックスは、それらのコントラクトが存在する名前空間ですか?

はいの場合: サービスタグもその名前空間を使用しないのはなぜですか?? 次のように変更しても違いはありますかname="b.B":

<service name="b.B">
   <endpoint address="ep1" binding="webHttpBinding" contract="a.IA" />   
   <endpoint address="ep2" binding="webHttpBinding" contract="b.IB" />
</service>
于 2011-09-09T21:46:46.330 に答える