2012-07-25 118 views
2

我正在開發使用WCF的RESTful Web服務。我希望有一個ServiceContract接口,可以實現我所有的服務,但是,我還希望每個服務都能夠實現自己的方法。使WCF .NET服務實現實現多個ServiceContract接口

在我的Global.asax文件我初始化服務路線:如下

[ServiceContract] 
public interface IAppService 

這是實現:

RouteTable.Routes.Add(new ServiceRoute("iOSAppService", new WebServiceHostFactory(), typeof(Service.iOSAppService))); 
RouteTable.Routes.Add(new ServiceRoute("AndroidAppService", new WebServiceHostFactory(), typeof(Service.AndroidAppService))); 
RouteTable.Routes.Add(new ServiceRoute("WindowsPhoneAppService", new WebServiceHostFactory(), typeof(Service.WindowsPhoneAppService))); 

每種服務必須實現IAppService接口

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class iOSAppService : IAppService 

但是,我會例如也喜歡iOSAppService實現IiOSApService接口:

[ServiceContract] 
public interface IiOSAppService 

因此導致執行:

public class iOSAppService : IAppService, IiOSAppService 

然而,這將導致以下例外:

服務 'iOSAppService' 實現多種的ServiceContract類型,並且沒有端點在配置文件中定義。 WebServiceHost可以設置默認端點,但前提是該服務只實現一個ServiceContract。將服務更改爲僅實現單個ServiceContract,或者在配置文件中明確定義服務的端點。

有誰知道我該如何實現我的目標?

+1

DataContract定義了什麼數據被序列化。 ServiceContract公開了這些方法。我不認爲你想讓你的ServiceContract繼承你的DataContract。正如錯誤所述,它們是兩種不同類型的合同。 – darethas 2012-07-25 12:40:38

+1

爲什麼你用'[DataContract]'裝飾界面?該屬性用於作爲參數參與的類(in-or -return types)。 「ServiceContract」和「OperationContract」屬性用於服務及其方法。 – abatishchev 2012-07-25 12:42:59

+1

@abatishchev根據錯誤消息,我認爲這是一個錯字。基於這個問題,我很確定OP知道DataContract和ServiceContract之間的區別。 – shambulator 2012-07-25 12:51:16

回答

3

讓您specyfic界面是這樣的:

[ServiceContract] 
public interface IiOSAppService : IAppService 

然後

public class iOSAppService : IiOSAppService 

編輯:

在服務端請確保您有:

<system.serviceModel> 
    <services> 
    <service name="YourNamespace.iOSAppService"> 
     <endpoint binding="webHttpBinding" contract="YourNamespace.IiOSAppService" behaviorConfiguration="web"> 
     </endpoint> 
    </service> 
    </services> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="web"> 
     <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 
+0

不幸的是,我這樣做時出現了完全相同的錯誤。 – Zappel 2012-07-25 15:58:02

+0

@Zappel查看我更新的答案。 – 2012-07-25 17:43:01

+0

非常感謝,它像一個魅力! – Zappel 2012-07-25 20:46:50