2011-08-26 1 views
1

동일한 포트에서 여러 WCF REST 서비스를 호스팅하려고합니다. Net.Tcp Port Sharing Service를 시작했는데 이것은 내 app.config 파일입니다.WCF 서비스 포트 공유 문제

<?xml version="1.0"?> 
<configuration> 

    <system.serviceModel>  
    <services> 
     <service name="MyService"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost/services/"/> 
      </baseAddresses> 
     </host> 

     <endpoint 
      address="test" 
      binding="webHttpBinding" 
      contract="IMyService"/> 
     </service> 
    </services> 

    <behaviors> 
     <endpointBehaviors> 
     <behavior> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

    <bindings> 
     <netTcpBinding> 
     <binding name="PortSharingEnabled" portSharingEnabled="true"> 
     </binding> 
     </netTcpBinding> 
    </bindings> 

    </system.serviceModel> 

</configuration> 

동일한 포트에서 두 개의 서비스를 여전히 호스트 할 수 없습니다.

두 번째 서비스를 실행하려고하면 다음 오류가 표시됩니다. http://screencast.com/t/Vlakb26XbuQr. "로컬 컴퓨터의 서비스 서비스가 시작된 다음 중지되었습니다. 일부 서비스는 다른 서비스 나 프로그램에서 사용 중이 아닌 경우 자동으로 중지됩니다."

추적 로그 (http://screencast.com/t/tJ5Gvmy4Dgm7)는 말한다 : "HTTP가 URL http://+:7778/MyServiceName/를 등록 할 수있는 또 다른 응용 프로그램이 이미 HTTP.SYS으로이 URL을 등록했다.."

편집 :

<services> 
    <service name="Service1"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:7778/"/> 
     </baseAddresses> 
    </host> 
    <endpoint 
     address="first" 
     binding="webHttpBinding" 
     contract="IService1"/> 
    </service> 
    <service name="Service2"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:7778/"/> 
     </baseAddresses> 
    </host> 
    <endpoint 
     address="second" 
     binding="webHttpBinding" 
     contract="IService2"/> 
    </service> 
</services> 

내가 뭔가 포트 공유를 가능하게없는 가정?

답변

1

당신이하려는 것은 의미가 없습니다. "포트 공유는"두 가지 방법으로 일어날 수있다 :

  • 의 HTTP : 이것은 Windows에서 상자 밖으로 (종류의) 작동, HTTP는 HTTP.SYS 커널 레벨 드라이버에 의해 처리되기 때문이다. 당신이해야 할 특별한 것은 없습니다.

  • Net.Tcp 포트 공유. 이를 위해서는 here 단계가 필요합니다. 당신의 (전용) 엔드 포인트는 HTTP - 바인딩이 아닌 Net.Tcp - 바인딩 (당신은 REST 스타일의 서비스를 사용하려면 차례로 의미가있는), 그래서 인터넷을 사용하도록 구성되어 그러나

. Tcp 포트 공유는 여기에 적용되지 않습니다.

정확히 무엇을하고 싶은지, 어떤 오류가 있는지에 대한 정보가 없으면 도움이되지 않습니다.

편집

여전히 혼란. app.config에서 엔드 포인트에 대해 포트 80을 사용하는 것처럼 보이지만 인용 한 오류 메시지는 포트 8080입니다. 어쨌든 다음은 적용 할 수 있습니다.

제공 한 오류 메시지에서 동일한 엔드 포인트 URI로 서비스를 두 번 등록/시작하려는 것처럼 보입니다. 이것은 작동하지 않습니다. hostname:port 부분이나 경로의 일부를 다시 사용할 수 있지만 전체 URI는 고유해야합니다.

예를 들어, 다음과 같은 엔드 포인트 URI를 사용할 수 있습니다

참고이 인터넷에 동일하다는 것을.Tcp 포트 공유 - 포트을 공유 할 수 있지만 완전한 (고유 한) 끝점 URI는 공유 할 수 없습니다. 따라서 이름은 "포트"공유 이름입니다. 이는 투명로드 밸런싱 메커니즘 또는 이와 같은 것이 아닙니다.

+0

내가 두 번째 서비스를 시작하려고하면 같은 포트,이 오류 상자가 나타납니다 : http://screencast.com/t/Vlakb26XbuQr. 그리고 이것은 추적 로그 예외입니다 : http://screencast.com/t/tJ5Gvmy4Dgm7. –

+0

에러 메시지를 텍스트로 추가 할 수 있습니까? 이렇게하면 과도한 기업 프록시 필터링으로 고통받는 우리 중 일부는이를 볼 수 있습니다. –

+0

내 원본 게시물이 이제 이러한 오류로 편집됩니다. –

0

허용되는 대답이 있더라도 프로그래밍 방식으로 서비스를 정의 할 때 비슷한 문제가 있다는 점을 그냥 던져 보겠습니다. 나는 서비스를 다음과 같은 방법으로 만들 : 나도 같은 _serviceAddress 다른 _endpointAddress 값이 여러 번 할 때, 놀랍게도

_serviceHost = new ServiceHost(_cmdService, new Uri(_serviceAddress)); 

ServiceEndpoint endPoint = 
    _serviceHost.AddServiceEndpoint(typeof(IHttpCmdService), _binding, _endpointAddress); 
endPoint.Behaviors.Add(new WebHttpBehavior()); 

을 실패합니다. 하지만 전체 주소를 _serviceAddress에 입력하면 성공합니다. 두 방법 모두 동일한 최종 서비스 URL로 끝납니다. 그것과 같을 것이다 있도록

그래서, 당신은 다른 baseAddress 값으로 서비스를 만들 넣으면 내가 궁금하네요이를 아는 것은 성공적으로 시작됩니다 :

<services> 
    <service name="Service1"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:7778/first/"/> 
     </baseAddresses> 
    </host> 
    <endpoint 
     address="" 
     binding="webHttpBinding" 
     contract="IService1"/> 
    </service> 
    <service name="Service2"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:7778/second/"/> 
     </baseAddresses> 
    </host> 
    <endpoint 
     address="" 
     binding="webHttpBinding" 
     contract="IService2"/> 
    </service> 
</services>