| 

.NET C# Java Javascript Exception

1
Hallo geehrte Community von codekicker,

mich würde interessieren, ob jemand Erfahrungen mit der Verwendung von Shared-Interfaces bei WCF gemacht hat.

Ist diese Vorgehensweise sinnvoll?

Erstmal: Was ist mit "Shared-Interfaces" gemeint?
Wenn man bei WCF von Shared-Interfaces spricht, dann meint man, dass man dasselbe Interface (vorzugsweise sogar dieselbe Assembly) sowohl im Client als auch im Server verwendet.
In diesem Fall verzichtet man auf die Generierung von Code anhand der WSDL.

Beides scheint Vor- und Nachteile zu haben.

Vorteile von Shared-Interfaces / Warum Shared-Inteface nutzen?
Meiner Meinung nach ist der entscheidende Vorteil beim Build der eigenen Applikation zu erkennen.
Schnittstellenänderungen müssen also nicht extra im Client-Projekt importiert bzw. aktualisiert werden.

Nachteile von Shared-Interfaces
Wie sagt man: "Wo Licht fällt, da gibt es auch Schatten" (oder ähnlich).
In diesem Fall ist die "Schattenseite" von Shared-Interfaces bei der Implementierung von TAP (Task-based Asynchronous Pattern) problematisch.
Beim Importieren über die WSDL hätte man nur auf der Client-seite die Task-based-Methoden.
Mit Shared-Interfaces muss man die Task-based-Methode auch im Server ausimplementieren.

Und hier ist mein Problem: Im Server kann nicht beides machen - also eine synchrone Methode und eine asynchrone Methode implementieren.

Beispiel:
[ServiceContract()]
public interface IDataService {
// synchron
[OperationContract()]
string GetData(int value);

// asynchron
[OperationContract()]
Task<string> GetDataAsync(int value);
}

public class DataService : IDataService
{
// synchron
public string GetData(int value) {
return value.ToString();
}

// asynchron
public Task<string> GetDataAsync(int value) {
return Task.FromResult(value.ToString());
}
}


Bei dieser Implementierung erhalte ich eine Fehlermeldung, weil WCF erkennt, dass zweimal dieselbe Methode implementiert ist.

Fehlermeldung
Es können keine zwei Vorgänge im gleichen Vertrag mit dem gleichen Namen bestehen.
Die Methoden "GetDataAsync" und "GetData" in Typ "MyNamespace.DataService" verstoßen gegen diese Regel.
Sie können den Namen eines der Vorgänge ändern, indem Sie den Methodennamen ändern oder die Name-Eigenschaft von OperationContractAttribute verwenden.


Mein Ziel ist es die Anwendung sozusagen Hybrid laufen zu lassen - sodass ich nicht gleich überall den Code überarbeiten muss (das wäre nämlich eine Menge).
Deshalb versuche ich beide Methoden zu implementieren.

Wenn jemand hier einen Vorschlag unterbreiten kann, dann wäre ich sehr dankbar.

Gruß,
Marcus D.
17.08.2015
Marcus.D 86 1 4
TOP TECHNOLOGIES CONSULTING GmbH