2011-11-03 14 views
6

Sono confuso riguardo alla registrazione della struttura del wcf del castello.Ho bisogno del file svc per configurare Castle Wcf Facility per servizi non HTTP

Ho letto alcuni post di blog per BasicHttpBinding. Ma non è stato possibile trovare un chiaro esempio per configurare una configurazione net.tcp.

voglio ospitare il servizio da un'applicazione console ...

ho scritto qualcosa di simile ... si può vedere un problema qui?

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

risposta

4

Se vuoi pubblicare i metadati è necessario abilitare la condivisione della porta (per permettere la condivisione MEX endpoint la stessa porta come la porta TCP regolare - si otterrà un'eccezione AddressAlreadyInUse se si dispone di questo set a false) e probabilmente è necessario specificare una porta sul vostro URL (non so cosa porta TCP avrebbe utilizzato in altro modo), la porta in modo che il codice dovrebbe essere (supponendo 8080 è OK per voi):

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

Questo funziona bene con il castello windsor 3.0.

+0

Tenere presente la possibilità che un utente non sia autorizzato a utilizzare la condivisione porta. Ho avuto questo problema, ho ottenuto una CommunicationException con il suggerimento che potevo modificare la sezione allowAccounts nel file SMSvcHost.exe.config per consentire all'utente di farlo. Ma questa soluzione non è praticabile perché il file si trova in C: \ Windows \ Microsoft.NET \ ... La mia soluzione finora: Rimuovi Mex Endpoint/PublishMetadata(). Pubblicherò i metadati con una seconda configurazione vincolante, se necessario in futuro. –

+0

Oh, e prima ho avuto il "Net.Tcp Port Sharing Service" disabilitato nei miei servizi Windows. Anche il tuo utente finale potrebbe avere disabilitato questo e potrebbe non essere autorizzato ad abilitarlo (e abilitarlo usando un programma di installazione non è una buona opzione) –