2011-11-03 7 views
6

Estoy confundido acerca del registro de la instalación wcf del castillo.¿Necesito el archivo svc para configurar Castle Wcf Facility para servicios que no son HTTP?

He leído algunas publicaciones de blog para BasicHttpBinding. Pero no se pudo encontrar una muestra fácil y clara para configurar una configuración net.tcp.

quiero para alojar el servicio de una aplicación de consola ...

escribí algo como esto ... se puede ver un problema aquí?

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

Respuesta

4

Si desea publicar metadatos tendrá que habilitar el uso compartido de puertos (para permitir la participación MEX punto final al mismo puerto que el puerto TCP normal - obtendrá una excepción AddressAlreadyInUse si usted tiene este conjunto en false) y es probable que tenga que especificar un puerto en la URL (no sé qué puerto TCP usaría otra cosa), por lo que el código debe ser (suponiendo que el puerto 8080 está bien para usted):

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

Esto funciona muy bien usar castillo windsor 3.0.

+0

Tenga en cuenta la posibilidad de que un usuario no pueda compartir puertos. Tuve este problema, recibí una CommunicationException con la sugerencia de que podía editar la sección allowAccounts en el archivo SMSvcHost.exe.config para permitir que el usuario lo hiciera. Pero esta solución no es factible porque el archivo se encuentra en C: \ Windows \ Microsoft.NET \ ... Mi solución hasta el momento: elimine Mex Endpoint/PublishMetadata(). Publicaré los metadatos con una segunda configuración de enlace, si es necesario en el futuro. –

+0

Ah, y antes tenía el "Net.Tcp Port Sharing Service" deshabilitado en mis servicios de Windows. Es posible que su usuario final también lo tenga deshabilitado y no se le permita habilitarlo (y habilitarlo usando un instalador no es una opción bonita) –

Cuestiones relacionadas