2011-09-09 60 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。將服務更改爲僅實施 單個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 - 但這並不真正顯示在您的配置中。

嘗試此:合同在端點

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

必須表示一個服務接口(通常),它定義了服務的方法 - 該接口必須具有適用於它的屬性[ServiceContract]

確定 - 這是一個拼寫錯誤,您的合同是正確的 - 但我的問題是:合同中存在命名空間的合同上是否有前綴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.IA和b.IB.那就是我所嘗試的,仍然有這個錯誤。兩個接口都有servicecontract屬性 – genericuser

+0

是的,它們是名稱空間。嘗試與你的建議,同樣的錯誤! – genericuser

+0

@ Priya10:更新了我的回覆 - 是不是在服務的'name ='屬性中缺少名稱空間前綴,可能是? –