[ Shadowed @ 29.10.2009. 08:03 ] @
Imam dve Windows aplikacije. Jedna hostuje WCF dok je druga klijent.
Server ima metod Connect(ClientInfo Client) koji dodaje Client-a u listu ObservableCollection<Client>.
Pomocu [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] sam postigao da svi klijenti koriste istu instancu servera.

Medjutim, ono sto zelim je da iz Form-e na serveru koristim istu tu instancu, ali direktno, ne preko WCF-a. Jedna od stvari koje pri tome hocu je da prikazujem listu klijenata i to mogu da postignem tako sto namestim da bude static. Medjutim, vise bih voleo da mogu da pristupim direktno instanci jer trebam i upraljvati istom a ne bih voleo da sve radim preko static promenljivih.

Dakle - da li je ovo izvodljivo i kako?
[ mmix @ 29.10.2009. 08:45 ] @
Moze samo ako je winforms aplikacija ujedno i WCF server. Instance ne mogu da prelaze application boundary, zato je remoting i izmisljen.
[ mmix @ 29.10.2009. 09:27 ] @
O, btw, da ti odgovorim, sledec ti vraca isntancu kad si unutar WCF poziva (npr kad si u formaterima i slicno):

((ServiceHost)OperationContext.Current.Host).SingletonInstance

kad si unutar metoda, prosto "this" radi, tako da ga smesti u neki static field i onda mozes da mu pristupis (pazi na konkurenciju, ali to vec moras da pazis sa Single context modom). Jedino sto ne mozes (bar ja ne znam da moze) je da napravis instancu umesto WCF-a i da mu je das na koriscenje za pozive.
[ Shadowed @ 29.10.2009. 10:21 ] @
Citat:
mmix: Moze samo ako je winforms aplikacija ujedno i WCF server. Instance ne mogu da prelaze application boundary, zato je remoting i izmisljen.

Jeste.

Citat:
mmix: O, btw, da ti odgovorim, sledec ti vraca isntancu kad si unutar WCF poziva (npr kad si u formaterima i slicno):

((ServiceHost)OperationContext.Current.Host).SingletonInstance

kad si unutar metoda, prosto "this" radi, tako da ga smesti u neki static field i onda mozes da mu pristupis (pazi na konkurenciju, ali to vec moras da pazis sa Single context modom).

To sam i ja pomislio da uradim, ali...

Citat:
mmix:Jedino sto ne mozes (bar ja ne znam da moze) je da napravis instancu umesto WCF-a i da mu je das na koriscenje za pozive.

...mi bas ovo treba.

Naime, ja kreiram instancu, ispodesavam je, kazem joj "hostuj" i to sve lepo radi, al' to nije on instanca koju klijenti pozivaju..
[ mmix @ 29.10.2009. 10:51 ] @
Ah, izgleda da ipak moze uz malo muke, pogledaj deo izmedju figure7 i 8 na ovom linku:

Discover Mighty Instance Management Techniques For Developing WCF Apps
[ Shadowed @ 29.10.2009. 12:55 ] @
Woohoo, radi!

Prvo me je totalno zbunilo to sto su dali kod:
Code:
public class ServiceHost : ServiceHostBase,...
{
    public ServiceHost(object singletonInstance,
        params Uri[] baseAddresses);
    public virtual object SingletonInstance { get; }
    ... // More members
}


jer nisam znao gde da stavim to. A nije ni trebalo nigde To samo opisuje kako izgleda konstruktor.
Tako sam samo trebao u Start() metodi umesto
Host = new ServiceHost(typeof(Server));
da stavim
Host = new ServiceHost(this);


Zahvaljujem