2011-11-03 5 views
6

성 wcf 시설 등록에 대해 혼란 스럽습니다.Castle Wcf 비 HTTP 서비스 용 시설을 설치하려면 svc 파일이 필요합니까?

저는 BasicHttpBinding에 대한 블로그 게시물을 읽었습니다. 그러나 net.tcp 설정을 설정하기위한 쉬운 샘플을 찾을 수 없습니다.

내가 콘솔 응용 프로그램에서 서비스를 호스팅 할이 ...

난 당신이 여기에 문제를 볼 수있는이 ... 뭔가를 썼다? false로 세트가 있다면 당신은 AddressAlreadyInUse 예외를 얻을 것이다 - 당신이 메타 데이터를 게시하고자하는 경우

_container = new WindsorContainer(); 
_container.AddFacility<WcfFacility>(); 

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>() 
    .AsWcfService(
     new DefaultServiceModel() 
      .AddEndpoints(WcfEndpoint 
        .BoundTo(new NetTcpBinding() { PortSharingEnabled = false }) 
        .At("net.tcp://localhost/MembershipService") 
      ) 
      .PublishMetadata() 
    ) 
); 

답변

4

당신은 MEX 엔드 포인트 공유를 일반 TCP 포트와 동일한 포트를 수 있도록 (포트 공유를 활성화해야합니다) 당신은 아마, 그래서 당신의 코드 (가정해야 포트 8080) 당신을 위해 OK입니다) (당신의 URL에 TCP 그렇지 않으면 사용하는 것이 어떤 포트 확실하지 않은 포트를 지정해야합니다

_container.Register(Component.For<IMembershipService>().ImplementedBy<MembershipService>() 
    .AsWcfService(
     new DefaultServiceModel() 
      .AddEndpoints(WcfEndpoint 
        .BoundTo(new NetTcpBinding() { PortSharingEnabled = true}) 
        .At("net.tcp://localhost:8080/MembershipService") 
      ) 
      .PublishMetadata() 
    ) 
); 

이 작동 잘 사용하여 성 윈저 3.0.

+0

사용자가 포트 공유를 사용할 수없는 경우를 염두에 두십시오. 이 문제가 발생했습니다. SMSvcHost.exe.config 파일에서 allowAccounts 섹션을 편집하여 사용자가이를 수행 할 수 있도록 힌트가있는 CommunicationException이 발생했습니다. 하지만이 솔루션은 C : \ Windows \ Microsoft.NET \에 파일이 있기 때문에 실용적이지 않습니다. 내 솔루션 지금까지 : Mex Endpoint/PublishMetadata()를 제거하십시오. 앞으로 필요할 경우 두 번째 바인딩 구성으로 메타 데이터를 게시 할 예정입니다. –

+0

아, 그리고 전에 "Net.Tcp 포트 공유 서비스"가 내 Windows 서비스에서 사용 중지되었습니다. 최종 사용자가이 기능을 사용 중지 할 수 있으며이를 사용하도록 설정하지 못할 수도 있습니다 (설치 프로그램을 사용하여 사용하도록 설정하는 것은 쉬운 옵션이 아닙니다). –