2009-05-02 5 views
1

Ich habe einen WCF-Dienst mit vielen Methoden und DataContracts. Es wird normalerweise von der großen Anwendung "A" verbraucht. Ich möchte eine kleine Anwendung "B" erstellen, die den gleichen Server verwendet, aber nur wenige Methoden aus dem Dienst. Ich möchte die Größe des XAP reduzieren, und da der Client einen Bruchteil aller vom Dienst bereitgestellten Methoden verwendet, möchte ich eine kleinere Dienstverweisdatei als die, die von Visual Studio automatisch erstellt wird. Ich kann Methoden entfernen, die nicht manuell verwendet werden, aber dann kann ich den Update-Service-Befehl nicht wirklich verwenden.So erstellen Sie einen getrimmten Dienst in WCF

Irgendwelche Lösungen?

Vielen Dank, Karol

Antwort

2

OK, so haben Sie eine komplette IGreatService Schnittstelle mit vielen Methoden, die auf einer MyGreatService Klasse implementiert werden.

Wie wäre es damit: Sie erstellen eine neue, zweite Schnittstelle IMyServiceB, die nur die wenigen Methoden enthält, die Sie der zweiten Benutzergruppe zugänglich machen möchten. Sie machen es so Ihren Dienst implementiert sowohl IGreatService und IMyServiceB (das ist absolut möglich, kein Problem):

public class MyGreatService : IGreatService, IMyServiceB 
{ 
.. 
} 

Service B im Grunde ruft dann nur diese wenigen Methoden in der Service-Implementierung, die Sie machen möchten - lassen Sie uns sagen, Sie haben MethodA auf IGreatService, die Sie auch auf IMyServiceB verfügbar machen möchten (wie MethodB) - implementieren es wie folgt aus:

public class MyGreatService : IGreatService, IMyServiceB 
{ 
    .... 
    // as defined on IGreatService 
    public void MethodA (....) 
    { 
    } 

    .... 
    public void MethodB (.....) // as defined on IMyServiceB 
    { 
     MethodA(); 
    } 
} 

auf diese Weise erhalten Sie zwei separate Schnittstellen (= Dienste), aber im Grunde schreiben Sie Ihren Code nur Einmal.

Sie können IMyServiceB dann auf einem getrennten und separaten Endpunkt bereitstellen, sodass Benutzer, die nur IMyServiceB sehen sollen, nur eine Verbindung mit diesem separaten Endpunkt herstellen können und nur die für die Verwendung der Service-B-Vorgänge erforderlichen Komponenten erhalten .

Konnte das funktionieren?

Marc

+0

Hallo Marc, es funktioniert ziemlich gut. Ich habe nicht den gleichen Dienst verwendet, da es als Singleton implementiert ist, sondern den zweiten Dienst erstellt hat, der sich wie ein Proxy verhält, aber trotzdem hat er mein Problem gelöst. –

Verwandte Themen