2013-02-01 2 views
0

우리는 WCFFacility를 사용하여 호스팅 된 (IIS 7.5) 환경에서 서비스를 설정하고 있습니다. 우리가 필요로하는 것은 각 서비스에 대해 두 개의 끝점, 즉 .NET 클라이언트 용 WSHttp 및 다른 모든 사용자 용 WebHttp를 제공하는 것입니다. 이것이 가능한가?WCFFacility를 사용하여 호스팅 된 서비스에 대한 WS/Rest 끝점을 모두 제공합니다.

코드 우리는 사용 후

_container.Register(
    Component 
     .For<ISomeService>() 
     .ImplementedBy<SomeService>() 
     .AsWcfService(new DefaultServiceModel() 
     .Hosted() 
     .PublishMetadata(mex => mex.EnableHttpGet()) 
     .AddEndpoints(
      WcfEndpoint.BoundTo(new WSHttpBinding()).At("v1/ws"), 
      WcfEndpoint.BoundTo(new WebHttpBinding()).At("v1/rest") 
     )) 
    ); 

그리고 :

RouteTable.Routes.Add(new ServiceRoute("", new DefaultServiceHostFactory(_container.Kernel), typeof(ISomeService))); 

을 나는 우리가 정말 WS/웹 엔드 포인트를 혼합 할 수 없습니다하지만 어떻게 든 다른 달성 할 수있는 것 같은데요? 우리는 XML 구성으로 대체하고 싶지 않지만 끝점을 구성해야합니다.

+0

내 경험에 비추어 볼 때 SOAP 및 REST 기대를 모두 준수하는 구현을 작성하는 것은 어렵습니다. –

+0

@ rarouš, 왜 안 되니? afaik, 속성이나 다른 구성에 충돌이 없기 때문에 필요한 것은 다른 끝점을 지정하는 것입니다. 나는 일종의 그것을 해결, 당신이 궁금해하는 경우 내 대답을 참조하십시오. – Kostassoid

+0

Becaure REST는 작업에 대한 리소스 및 SOAP에 관한 것입니다. 그것들은 다른 패러다임입니다. 적어도 그들은 API 레벨에서 매우 다른 오류 처리를합니다 ... –

답변

1

하루 종일 파고 들기가 힘든 해결책을 발견했습니다. 마지막으로 도움말/wsdl 페이지를 얻는 방법을 제외하고 어떤 방식으로도 테스트되지 않았습니다. 그래서 잠시 질문을 공개합니다.

_container.Register(
    Component 
    .For<ISomeService>() 
    .ImplementedBy<SomeService>() 
    .AsWcfService(new RestServiceModel().Hosted()) 
    .AsWcfService(new DefaultServiceModel().Hosted() 
     .PublishMetadata(mex => mex.EnableHttpGet()) 
     .AddEndpoints(
      WcfEndpoint.ForContract<ISomeService>().BoundTo(new WSHttpBinding()) 
     ) 
    ) 
); 

RouteTable.Routes.Add(new ServiceRoute("v1/rest", new WindsorServiceHostFactory<RestServiceModel>(_container.Kernel), typeof(ISomeService))); 
RouteTable.Routes.Add(new ServiceRoute("v1/ws", new WindsorServiceHostFactory<DefaultServiceModel>(_container.Kernel), typeof(ISomeService))); 
관련 문제