11 Stimmen

Vererbung von Verträgen in WCF

Ich habe mehrere WCF-Dienste in einem Test-Harness, die haben einige ähnliche Funktionen, wie das Starten/Stoppen/Reinigen von Teilen des zu testenden verteilten Systems. Ich kann dafür keinen universellen Vertrag verwenden - jeder Teil des verteilten Systems hat unterschiedliche Schritte für diese Vorgänge.

Ich dachte an die Definition einer Basisschnittstelle und die Ableitung der aktuellen WCF-Schnittstellen von diesen.

Zum Beispiel:

interface Base
{
    void BaseFoo();
    void BaseBar();
    ...
}

interface Child1:Base
{
    void ChildOperation1();
    ...
}

interface Child2:Base
{
    void ChildOperation2();
    ...
}

Was ich im Moment habe, sind diese Start-/Stop-/Löschvorgänge, die in jeder untergeordneten Schnittstelle definiert sind.

Q Soll ich eine ähnliche Funktionalität in die Basisschnittstelle integrieren oder gibt es andere Lösungen? Werde ich irgendwelche Probleme mit der Vererbung von Verträgen in WCF haben?

22voto

croisharp Punkte 1876

Die Schnittstellen von Serviceverträgen können voneinander abgeleitet werden, so dass Sie eine Hierarchie von Verträgen definieren können. von Verträgen zu definieren. Allerdings muss die ServiceContract attribute is not inheritable :

[AttributeUsage(Inherited = false,...)]
public sealed class ServiceContractAttribute : Attribute
{...}

Folglich muss jede Ebene in der Schnittstellenhierarchie explizit das Attribut Service Vertrag haben.

Vertragshierarchie auf der Leistungsseite:

[ServiceContract]
interface ISimpleCalculator
{
    [OperationContract]
    int Add(int arg1,int arg2);
}
[ServiceContract]
interface IScientificCalculator : ISimpleCalculator
{
    [OperationContract]
    int Multiply(int arg1,int arg2);
}

Wenn es um die Implementierung einer Vertragshierarchie geht, kann eine einzelne Serviceklasse Folgendes implementieren die gesamte Hierarchie implementieren, genau wie bei der klassischen C#-Programmierung:

class MyCalculator : IScientificCalculator
{
    public int Add(int arg1,int arg2)
    {
        return arg1 + arg2;
    }
    public int Multiply(int arg1,int arg2)
    {
        return arg1 * arg2;
    }
}

Der Host kann einen einzigen Endpunkt für die unterste Schnittstelle in der Hierarchie bereitstellen:

<service name = "MyCalculator">
    <endpoint
    address = "http://localhost:8001/MyCalculator/"
    binding = "basicHttpBinding"
    contract = "IScientificCalculator"
    />
</service>

Sie müssen sich nicht um die Vertragshierarchie kümmern.
Inspiriert durch Juval Lowy WCF-Buch

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X