2011-09-09 35 views
0

サービス契約を実装するクラスがあります。このクラスから派生し、別のサービス契約を実装する別のクラスクラス実装サービス契約別のクラスの基本クラスWCF

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のみを実装している場合に限ります。 1つのServiceContractのみを実装するようにサービスを変更するか、またはコンフィグレーションファイルで明示的にサービス のエンドポイントを定義します。

ありがとうございます。

EDIT

設定は、上記のタイプミスがありました。

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

(それはどんな違いがあれば)私はこのために使用していたテンプレートは、WCFレストテンプレート4.0である

答えて

0

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

このサービスクラスで実装されている契約はIBですが、あなたの設定に実際には表示されません。そのインターフェイスが適用さ[ServiceContract]属性を持っている必要があります - エンドポイントで契約は、サービスメソッドを定義するサービスインターフェースを(一般的に)示す必要があります

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

はこれを試してみてください。

OK - これはタイプミスで、契約は正しいですが、私の質問は次のとおりです。a.b.という接頭辞は契約の名前空間にありますか?

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

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

これはa typで、a.IAとb.IBである必要があります。それは私が試したものだが、それでもエラーがある。どちらのインターフェイスもservicecontract属性を持っています。 – genericuser

+0

はい、それらは名前空間です。あなたが提案したものを試しました、同じエラー! – genericuser

+0

@ Priya10:私の応答が更新されました。サービスの 'name ='属性に名前空間の接頭辞がありませんか? –

関連する問題