Domanda

Ho letto molti esempi/tutorial (incl. Alessandria di Ayende su MSDN).

Ma solo ottenere assemblaggi in qualche modo aggiornati si sono dimostrati un ostacolo in sé. Dopo aver ottenuto la versione corretta di Castle.windsor, non riesce a trovare la sezione corretta nel file app.config. La sintassi sia nel bus di servizio di Rhino che nel Castlebootstrapper è stata cambiata - e ora sono totalmente confuso. La "documentazione" sui rinoceronti in letargo non mi sta davvero aiutando a iniziare.

Qualcuno potrebbe aiutarmi un campione funzionante con il bus di servizio Rhino con Castle Windsor v. 3.0 (beta) o 2.5.3, indicami qualcosa di già online o semplicemente dandomi un gioco passo-passo su ciò che devo ottenere per ottenere installato e funzionante?

È stato utile?

Soluzione

Dopo aver scaricato gli ultimi bit Rhino-ESB da GitHub (https://github.com/hibernating-rhinos/rhino-esb) e costruendolo, è piuttosto semplice iniziare.

Ho un'applicazione MVC ASP.NET che comunica con un backend tramite Rhino-ESB.

Sul lato ASP.NET MVC:

Su global.asax.cs:

private IWindsorContainer _container;

protected void Application_Start()
{
    _container = new WindsorContainer();
    new RhinoServiceBusConfiguration().UseCastleWindsor(_container).Configure();
    _container.Install(new YourCustomInstaller());
    //Don't forget to start the bus
    _container.Resolve<IStartableServiceBus>().Start();
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(_container));
}

Notare che YourCustomInstaller deve implementare IWindsorInstaller e registri i tuoi controller con il contenitore in Installmetodo:

public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store)
{
    container.Register(Component
       .For<HomeController>().LifeStyle.PerWebRequest.ImplementedBy<HomeController>());

Si noti inoltre che il WindsorControllerFactory delega internamente la creazione del controller al contenitore:

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
            return null;
        return (IController)this.container.Resolve(controllerType);
    }

Ultimo ma non meno importante, fornisci la configurazione sul tuo web.config

<configSections>
    <section name="rhino.esb" type="Rhino.ServiceBus.Config.BusConfigurationSection, Rhino.ServiceBus"/>
  </configSections>
  <rhino.esb>
    <bus threadCount="1"
         numberOfRetries="5"
         endpoint="rhino.queues://localhost:31316/Client"
         queueIsolationLevel="ReadCommitted"
         name="Client"/>
    <messages>
      <add name="YourMessagesNamespace"endpoint="rhino.queues://localhost:31315/Backend"/>
    </messages>
  </rhino.esb>

Questa configurazione presuppone che il backend esegui una coda in LocalHost: 31315 e il client esegue la sua coda su LocalHost: 31316.

Sul lato backend: supponendo che lo stiamo eseguendo come applicazione della console,

static void Main(string[] args)
        {
            IWindsorContainer container;
            container = new WindsorContainer();
            new RhinoServiceBusConfiguration()
                .UseCastleWindsor(container)
                .Configure();
            var host = new RemoteAppDomainHost(typeof(YourBootstrapper));
            host.Start();

            Console.WriteLine("Starting to process messages");
            Console.ReadLine();

Notare che YourBootstrapperimplementazioni di classe CastleBootstrapper

public class YourBootstrapper: Rhino.ServiceBus.Castle.CastleBootStrapper
    {
        protected override void ConfigureContainer()
        {
            Container.Register(Component.For<OneOfYourMessages>());
        }
    }

in cui stiamo registrando un consumatore per OneOfYourMessages

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top