因此,出于一些顾虑,我将最初的单一接口契约拆分为两个独立的契约。现在,我只有一个类(部分)实现了这两个接口,我想通过 WCF 将它们全部作为 REST 服务提供。合同如下所列。
我正在将 Autofac 用于 WCF 服务主机。
下面是我的 .svc 文件代码
对于 WCF 服务:Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf"
对于 RESTful 服务:Factory="Autofac.Integration.Wcf.AutofacWebServiceHostFactory, Autofac.Integration.Wcf"
WCF 示例:
对于 wcf 服务
public interface IEmployeeCommandService {}
public interface IEmployeeQueryService {}
public partial class EmployeeService : IEmployeeCommandService {}
public partial class EmployeeService : IEmployeeQueryService {}
public partial class EmployeeService {}
我的 Web.config 文件如下所示
<service behaviorConfiguration="ServiceBehavior" name="Application.EmployeeService">
<endpoint address="" binding="basicHttpBinding" contract="Application.IEmployeeCommandService" />
<endpoint address="" binding="basicHttpBinding" contract="Application.IEmployeeQueryService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
我的EmployeeService.svc代码看起来像
<%@ ServiceHost Service="Application.EmployeeService, Application"
Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf"%>
使用这种方法,普通的 WCF 服务对我来说工作得很好。浏览EmployeeService.svc时,我可以看到命令和查询服务操作。
我正在尝试 RESTFul 服务的类似方法,如下所述。但是当我浏览我的 RESTFul 服务时出现错误。
RESTFul 示例:
public interface IEmployeeRESTfulQueryService {}
public interface IEmployeeRESTfulCommandService {}
public partial class EmployeeRESTfulService {}
public partial class EmployeeRESTfulService : IEmployeeRESTfulCommandService {}
public partial class EmployeeRESTfulService : IEmployeeRESTfulQueryService {}
我的 web.confing 如下所示
<service behaviorConfiguration="ServiceBehavior" name="Application.EmployeeRESTfulService">
<endpoint name="Command" address="Command" behaviorConfiguration="webHttp" binding="webHttpBinding" contract="Application.IEmployeeRESTfulCommandService" />
<endpoint name="Query" address="Query" behaviorConfiguration="webHttp" binding="webHttpBinding" contract="Application.IEmployeeRESTfulQueryService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<behavior name="webHttp">
<webHttp helpEnabled="true" automaticFormatSelectionEnabled ="true" />
</behavior>
如果我浏览我的 .svc (RESTFul) 我最终会出现以下错误..
错误:
Service 'EmployeeRESTfulService' 实现了多种 ServiceContract 类型,并且在配置文件中没有定义端点。WebServiceHost 可以设置默认端点,但前提是服务仅实现单个 ServiceContract。要么将服务更改为仅实现单个 ServiceContract,要么在配置文件中明确定义服务的端点。