2009-04-06 3 views
31

하나의 WCF 서비스가 다중 인터페이스를 제공 할 수 있습니까? 그렇다면 app.config에서 어떻게 표현할 수 있습니까?단일 WCF 서비스의 여러 인터페이스?

하나의 엔드 포인트에서 여러 개의 인터페이스를 제공하는 하나의 서비스를 의미합니다.

답변

50

먼저 서비스가 무엇인지 분명히해야합니다. 동일한 호스트에서 단일 엔드 포인트 또는 다중 엔드 포인트를 의미합니까?

단일 엔드 포인트를 의미한다고 가정하고 예,하지만 약간의 작업이 필요합니다. 엔드 포인트는 단일 인터페이스 만 구현할 수 있습니다. 그렇기 때문에 구현하려는 모든 인터페이스를 하나의 인터페이스로 결합하면됩니다. 구현 클래스 내에서 모든 인터페이스를 구현해야합니다. 당신이 할 수없는 것은 다중 인터페이스를 가지며 다중 구현은 마술처럼 단일 종점으로 병합됩니다. WCF와

+0

고마워, 그게 정확히 내가 물어 보는거야. –

+0

간단하고 똑똑! 뛰어난 솔루션. +1 나를 –

+0

나는 두 개의 인터페이스를 가지고, 내가 두 가지 서비스를해야합니까? 각 인터페이스에 동일한 서비스의 엔드 포인트가있는 두 개의 인터페이스를 사용할 수 있습니까? –

5

수행 할 수 있습니다

  • 가 하나 개의 서비스 구현 클래스가 다수의 엔드 포인트, 예를 들면 통해 노출 된 여러 서비스 인터페이스를 구현하는 하나 개의 서비스 구현 클래스가 최대 상호 운용성을 위해 BasicHttpBinding을 사용하는 하나의 서비스 엔드 포인트와 최대 성능을 위해 NetTcpBinding을 사용하는 다른 엔드 포인트 (WCF 클라이언트 포함).
3

App.Config의 두 개의 다른 끝점에 같은 인터페이스를 표시하는 방법은 다음과 같습니다.

<service name="Service1">  
    <endpoint address="http://localhost:8001/service1.asmx" binding="basicHttpBinding" contract="IService" /> 
</service> 
<service name="Service2">  
    <endpoint address="http://localhost:8002/service2.asmx" binding="basicHttpBinding" contract="IService" /> 
</service> 
3

구현 클래스가 너무 커지면 (예 : 광산) 부분 클래스에서 수퍼 인터페이스를 구현하십시오. 하나의 인터페이스 구현을 하나의 파일에 넣을 수 있습니다. 그것은 단지 대회이지만 나중에는 유용 ​​할 수 있습니다.

21

다음은 원래의 목표에 더 가까이보고 하나의 큰 인터페이스를 포함하지 않는 ... 단일 ListenUri에서

여러 엔드 포인트는 : http://msdn.microsoft.com/en-us/library/aa395210.aspx


위의 링크 샘플은 있다고 설명 서로 다른 인터페이스 (계약)를 구현하는 동일한 물리적 주소 (listenUri)에 여러 끝점을 등록 할 수 있습니다. 예 :

<endpoint address="urn:Stuff" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.ICalculator" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 
<endpoint address="urn:Stuff" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.IEcho" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 
<endpoint address="urn:OtherEcho" 
     binding="wsHttpBinding" 
     contract="Microsoft.ServiceModel.Samples.IEcho" 
     listenUri="http://localhost/servicemodelsamples/service.svc" /> 

수신 메시지가 주소 필터와 계약 필터의 조합을 기반으로 적절한 엔드 포인트로 라우트되기 때문에 가능합니다.

+1

실제로 사용할 수있는 좋은 대답을 보았을 때 읽는 것을 중단했습니다. 나는 당신의 응답을 제 시간에 보았 더라면 좋겠다. +1 왜냐하면 내가 받아 들인 대답에 적합한 경우를 생각할 수 있지만 이것은 더 나은 대답이기 때문입니다. –

+1

이 문제는 내가 만난 이슈에 대해 훨씬 더 나은 해결책입니다. 필자는 내 솔루션에 필요한 두 가지 유형의 serializer를 사용할 수있었습니다. –