因此,由于一些问题,我将最初的单一接口合同分成两个独立的合同。现在,我只有一个类(部分)实现两个接口,我想通过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 时,我可以看到命令&amp;查询服务操作。
Simillar方法我正在尝试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),我最终得到以下错误..
错误:
服务'EmployeeRESTfulService'实现多个ServiceContract类型,并且配置文件中没有定义端点。 WebServiceHost可以设置默认端点,但前提是该服务仅实现单个ServiceContract。将服务更改为仅实现单个ServiceContract,或者在配置文件中显式定义服务的端点。
答案 0 :(得分:1)
Factory=System.ServiceModel.Activation.WebServiceHostFactory
?如果是这样,请删除Factory属性,因为您在config中定义了端点。 在编辑后更新:restful服务Factory
使用的Autofac.Integration.Wcf.AutofacWebServiceHostFactory, Autofac.Integration.Wcf
正在使用WebServiceHost
,这要求服务类只实现一个[ServiceContract]
界面。你需要Autofac工厂吗?如果没有,只需删除该属性;否则,因为你已经通过配置定义了端点,我想它也应该适用于“普通”工厂(AutofacServiceHostFactory)(我从未使用过Autofac,但你可以试试)。