我正在使用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,或者在配置文件中显式定义服务的端点。
有谁知道如何实现我的目标?
答案 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>