2

我正在使用 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

但是,这会导致以下异常:

Service 'iOSAppService' 实现了多种 ServiceContract 类型,并且在配置文件中没有定义端点。WebServiceHost 可以设置默认端点,但前提是服务仅实现单个 ServiceContract。要么将服务更改为仅实现单个 ServiceContract,要么在配置文件中明确定义服务的端点。

有谁知道我怎样才能实现我的目标?

4

1 回答 1

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>
于 2012-07-25T12:35:10.307 回答