使WCF .NET服务实现实现多个ServiceContract接口

时间:2012-07-25 12:24:00

标签: c# .net wcf rest exception-handling

我正在使用WCF开发RESTful Web服务。我希望我的所有服务都有一个ServiceContract接口,但是,我也希望每个服务都能实现自己的方法。

在我的Global.asax文件中,我初始化了服务路径:

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接口:

[ServiceContract]
public interface 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 个答案:

答案 0 :(得分:3)

使您的具体界面如下:

[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>