2013-03-16 10 views
6

ho intorno a 6 servizi WCF che voglio ospitare in un'applicazione MVC, le richieste di routing per /services/foo a WcfFooService e /services/bar-WcfBarServiceCome posso ospitare più servizi WCF basati su IoC in MVC?

posso fare CIO con StructureMap all'interno dei servizi e iniettare il mio dipendenze del costruttore usando l'esempio che Jimmy Bogard ha scritto su here:

L'articolo di Jimmy è ottimo, ma sto cercando di estenderlo per lavorare con multiple se rvizi ospitati all'interno della stessa applicazione MVC. In sostanza, la parte in basso è la parte che mi sta causando qualche mal di testa:

public class StructureMapServiceHostFactory : ServiceHostFactory 
{ 
    public StructureMapServiceHostFactory() 
    { 
     ObjectFactory.Initialize(x => x.AddRegistry<FooRegistry>()); 
     //var iTriedThisToo = ObjectFactory.Container; 
     //container.Configure(x => x.[etc]); 
    } 

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
    { 
     return new StructureMapServiceHost(serviceType, baseAddresses); 
    } 
} 

Con un servizio singolo WCF - il routing delle richieste MVC a un URL specifico tramite lo StructureMapServiceHostFactory mostrato sopra funziona brillantemente - ma - Se (ad esempio) creo un StructureMapServiceHostFactory2 per la chiamata /services/bar, per consentire l'utilizzo di un Registro di sistema diverso, quando l'app MVC si alza, sembra chiamare ogni factory a turno mentre scorre attraverso RouteConfig.cs e aggiunge le rotte, quindi alla fine non ottengo istanze configurate che dovrebbe fornire il primo ServiceHostFactory.

Non fa differenza se chiamo Initialize(); o tento di afferrare la proprietà Container e di chiamare Configure su entrambi.

Sono in un nascondiglio per nulla con questo? La ragione principale per richiedere l'isolamento del registro è dovuta alla diversa configurazione di NHibernate, ma I potrebbe configurare le istanze Named di SessionFactory e Session per NHibernate e quindi utilizzare un singolo registro per aggirare questo problema. Nella mia mente volevo che il servizio WCF e l'hosting MVC fossero in grado di utilizzare i propri contenitori IoC in isolamento, motivo per cui ho seguito questa strada.

Esiste un modo per ottenerlo?

+1

6 WCF? Wow! Spero che tu stia utilizzando la comunicazione basata sui messaggi con quei servizi WCF (come [questo articolo] (http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=95) spiega), altrimenti sarebbe probabilmente sarà piuttosto doloroso. – Steven

+1

Interessante articolo Steven! Grazie per la condivisione, certamente potremmo fare con un'architettura più pulita del genere. Potrebbe anche essere l'elemento abilitante per ciò di cui ho bisogno .... gli darò un'occhiata da vicino – SpaceBison

risposta

0

Ok, quindi sembrerebbe che l'unica persona in grado di rispondere a questo ero io, in virtù di un ripensamento e 're-architecting' la soluzione in modo che il problema non esista in primo luogo.

Ora ho un modo efficace per ospitare questi servizi e mantenere IoC con StructureMap ordinatamente per servizio, senza preoccupazioni contrastanti.

Se vi trovate in una posizione simile con SOA presa in consegna (SOATO?) - fare un passo indietro è un buon inizio;) servizi

+0

Qual è stata la soluzione ri-architettata? – Wiz

Problemi correlati