2008-11-13 14 views
6

Ich habe etwas .NET-Remoting-Code, bei dem eine Factory-Methode, die in einer serverseitigen Klasse implementiert ist, Schnittstellen zu konkreten Objekten zurückgibt, die ebenfalls auf demselben Server ausgeführt werden. .NET Remoting erstellt automatisch Proxies und ermöglicht es mir, die Schnittstellen an den Client zu übergeben, der diese dann direkt aufrufen kann.Zurückgeben einer Schnittstelle von einem WCF-Dienst

Beispiel Schnittstellen:

public interface IFactory 
{ 
    IFoo GetFoo(); 
} 

public interface IFoo 
{ 
    void DoSomething(); 
} 

Beispiel Client-Code:

... 
IFactory factory = (IFactory) System.Activator.GetObject (typeof (IFactory), url); 
... 
IFoo foo = factory.GetFoo(); // the server returns an interface; we get a proxy to it 
foo.DoSomething(); 
... 

Das alles funktioniert super. Jetzt versuche ich jedoch meinen Code zu WCF zu migrieren. Ich frage mich, ob es eine Möglichkeit gibt, um Schnittstellen zu übergeben und WCF die Proxies im laufenden Betrieb auf dem Client generieren, wie das ursprüngliche .NET-Remoting.

Und ich möchte keine Klasseninstanzen zurückgeben, da ich keine echten Klassen offen legen will. Auch das Serialisieren der vollständigen Instanz und das Senden zwischen dem Server und dem Client ist keine Option. Ich möchte nur, dass der Client mit dem Serverobjekt über einen Schnittstellenzeiger/Proxy kommuniziert.

Irgendwelche Ideen?

Antwort

0

Die ChannelFactory-Klasse tut dies genau, generiert einen Proxy dynamisch zur Laufzeit mit einer Schnittstelle.

1

Sorry, jezell, ich verstehe es nicht.

Ja, ich kann ChannelFactory auf dem Client verwenden, um einen Proxy zu IFactory zu erstellen, da dieses Singleton-Objekt vom Server über einen URI auf dem ServiceHost "veröffentlicht" wurde.

Aber meine IFoo Instanzen auf dem Server wurden keiner ServiceHost zugeordnet; Ich möchte sie nur zurückrufen, indem ich meinen IFactory-Proxy auf dem Client anrufe und WCF den Anruf an den Server IFactory machen lassen, der einige IFoo bereitstellen würde, die dann zum Client zurückgemeldet und in einen dynamisch generierten Proxy eingebunden würden. Ich möchte wirklich factory.GetFoo(); auf meinem Client schreiben können ...

In der Zwischenzeit wies mich Brian auf ein sehr interessantes Dokument, das ich auf MSDN übersehen hatte, das erklärt, wie man die .NET Remoting-Schnittstelle mapshaling durch mit Sitzungen und EndPointAddress10 und ... wie Sie geschrieben haben, ChannelFactory, um die Client-Seite Proxys zu erhalten.

So, jetzt weiß ich, wie man meinen .NET-Remoting-Code repliziert, aber dafür einen relativ hohen Preis bezahlt. Die Code-Komplexität, die mit WCF verbunden ist, ist ein bisschen höher als bei der einfachen alten .NET-Remoting-Lösung.

Verwandte Themen