2011-11-03 6 views
6

Jestem zdezorientowany co do rejestracji obiektu w zamku wcf.Czy potrzebuję pliku svc do instalacji obiektu Castle Wcf dla usług innych niż HTTP

Przeczytałem kilka wpisów na blogu dla BasicHttpBinding. Nie można jednak znaleźć łatwej próbki do skonfigurowania konfiguracji net.tcp.

Chcę hosta usługi z aplikacji konsoli ...

napisałem coś takiego ... widać tu problem?

_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() 
    ) 
); 

Odpowiedz

4

Jeśli chcesz publikować metadane trzeba będzie włączyć udostępnianie portów (niech udział MEX Endpoint tego samego portu jako zwykłego portu TCP - dostaniesz wyjątek AddressAlreadyInUse jeśli masz ten ustawiona na false) i prawdopodobnie trzeba podać port na adres URL (nie wiem, co port TCP użyłby inaczej), więc kod powinien być (zakładając Port 8080 jest OK dla Ciebie):

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

to działa prawidłowo przy użyciu zamek windsor 3.0.

+0

Należy pamiętać o tym, że użytkownik nie może korzystać z udostępniania portów. Miałem ten problem, dostałem wyjątek CommunicationException z podpowiedzią, że mogę edytować sekcję allowAccounts w pliku SMSvcHost.exe.config, aby umożliwić użytkownikowi to zrobić. Ale to rozwiązanie nie jest możliwe, ponieważ plik znajduje się w C: \ Windows \ Microsoft.NET \ ... Moje rozwiązanie do tej pory: Usuń Mex Endpoint/PublishMetadata(). Opublikuję metadane z drugą konfiguracją wiązania, jeśli będzie taka potrzeba w przyszłości. –

+0

Aha, i zanim zostałem wyłączony "Usługa udostępniania portów Net.Tcp" w moich usługach Windows. Twój użytkownik końcowy może mieć to również wyłączone i może nie mieć możliwości włączenia go (i włączenie go przy użyciu instalatora nie jest dobrą opcją) –

Powiązane problemy