2012-09-26 2 views
2

그래서 몇 가지 문제로 인해 처음에는 단일 인터페이스 계약을 두 개의 개별 계약으로 분리했습니다. 이제는 두 인터페이스를 모두 구현하는 클래스가 하나 뿐이므로 WCF를 통해 REST 서비스로 모두 사용할 수있게하려고합니다. 계약 내용은 다음과 같습니다.서비스가 여러 ServiceContract 유형을 구현하는 경우 Restful Service가 ServiceActivationException을 발생시킵니다.

WCF 서비스 호스트 용으로 Autofac을 사용하고 있습니다. Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf"

RESTful 서비스의 경우 : Factory="Autofac.Integration.Wcf.AutofacWebServiceHostFactory, Autofac.Integration.Wcf"

WCF 예 : 아래

는 WCF 서비스에 대한 내 SVC는 파일 코드

입니다

WCF 서비스에 대한

public interface IEmployeeCommandService {} 
public interface IEmployeeQueryService {} 
public partial class EmployeeService : IEmployeeCommandService {} 
public partial class EmployeeService : IEmployeeQueryService {} 
public partial class EmployeeService {} 
<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 서비스를 보이는 것처럼

그리고 내 Web.config 파일 보인다. EmployeeService.svc 찾아보기 명령 & 쿼리 서비스 작업을 모두 볼 수 있습니다.

simillar approach 나는 아래와 같이 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는 (: 편안를) 검색하면 I endup 아래 에러 ..

오류 :

서비스 'EmployeeRESTfulService'는 여러 ServiceContract 유형을 구현하며 구성 파일에는 엔드 포인트가 정의되어 있지 않습니다. WebServiceHost는 서비스가 단일 ServiceContract 만 구현하는 경우에만 기본 끝점을 설정할 수 있습니다. 어느

답변

1
  1. 당신이 SVC는 파일에 Factory=System.ServiceModel.Activation.WebServiceHostFactory를 사용하십니까 .. 단 하나의 ServiceContract를 구현, 또는 다른 명시 적으로 구성 파일에서 서비스 엔드 포인트를 정의하는 서비스를 변경? 그렇다면 config에서 엔드 포인트를 정의하므로 Factory 속성을 제거하십시오.
  2. WCF의 끝점은 계약 (인터페이스)에 바인딩됩니다. 두 개의 서로 다른 인터페이스가 있다면 두 개의 서로 다른 끝점이 필요합니다.편집 다음

업데이트 : 편안한 서비스, Autofac.Integration.Wcf.AutofacWebServiceHostFactory, Autofac.Integration.Wcf, 하나의 [ServiceContract] 인터페이스를 구현하는 서비스 클래스를 필요로하는 WebServiceHost를 사용하여 사용 Factory. Autofac 공장이 필요합니까? 그렇지 않은 경우 해당 속성을 제거하십시오. 그렇지 않으면 config를 통해 이미 엔드 포인트를 정의하고 있으므로 정상적인 팩토리 (AutofacServiceHostFactory)와도 잘 맞아야한다고 생각합니다. (필자는 Autofac을 사용하지 않았지만 시도해 볼 수 있습니다).

관련 문제