Meine Anwendung hat 2 "Dienste", sagen wir, eine ist eine grundlegende (Integer) Rechner, und eine ist ein Gleitkomma-Rechner. Ich drücke diese als Schnittstellen wie folgt aus:
public interface IBasicCalculator
{
int Add( int a, int b );
}
public interface IFloatingPointCalculator
{
double Add( double a, double b );
}
Ich möchte diese über WCF bereitstellen. Leider WCF scheint sehr eng an die Vorstellung, dass jede mögliche Operation, die Sie aussetzen möchten, muss durch eine einzige Service-Schnittstelle gehen gebunden werden - Sie können nicht Sitzungen zwischen den Diensten teilen, es ist umständlich von der Client-Seite, wie Sie einen separaten Proxy für jeden erstellen müssen, es scheinen keine "Sub-Services", etc...
Ich bin also zu dem Schluss gekommen, dass ich eine "kombinierte" Schnittstelle (man könnte sie auch als Fassade bezeichnen) präsentieren muss, etwa so:
[ServiceContract]
public interface ICalculatorService : IBasicCalculator, IFloatingPointCalculator
{
[OperationContract(Name = "AddInt")]
new int Add( int a, int b );
[OperationContract(Name = "AddDouble")]
new double Add( double a, double b );
}
Wenn ich dies tue, dann stellt WCF beide Methoden dem Client zur Verfügung, der sie aufrufen kann, und alles funktioniert tatsächlich.
Eine solche "Vererbung der Schnittstellen" scheint jedoch unhandlich zu sein. Besonders el new
int Add
y new
double Add
. Streng genommen, new
bei einer Methode bedeutet, dass eine darunter liegende Methode versteckt wird, was ich eigentlich gar nicht tue. Ich kann die new
aber dann erhalte ich nur Compiler-Warnungen, die auf "Ich glaube, ich verstecke diese Methode, Sie müssen sie in Methode umbenennen oder sie mit 'new' versehen" hinauslaufen.
Dies ist also eine zweiteilige Frage:
-
Bin ich auf dem richtigen Weg mit meinem "kombinieren alles in eine Schnittstelle" Logik, oder gibt es tatsächlich eine Möglichkeit, "Sub-Dienste" oder "mehrere verknüpfte Dienste" mit WCF auszusetzen?
-
Gibt es einen besseren Weg, wenn dies notwendig ist?
Danke!