Laden...

WCF Design

Erstellt von altertoby vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.022 Views
A
altertoby Themenstarter:in
61 Beiträge seit 2005
vor 16 Jahren
WCF Design

Hallo,
ich programmiere gerade an einer neuen Variante meines Browsergames...dabei soll jetzt auf WCF gesetzt werden!
Also die Struktur sieht bisher so aus (Prototyp)
Webseite ruft per WCF die BLL in einem Windows Service auf. Diese ruft ihrerseits die DAL auch in dem selben Windows Service auf, die DAL ist so gestaltet, dass sie die Daten ständig im Cache behält und ggf für Backups in XML-Dateien dumpt.

In Code sieht das dann in etwa so aus:
Webseite


using (BLLServiceClient client = new BLLServiceClient("pipeBLLService"))
{
	client.GetData(0));
}

BLL


[ServiceContract]
public interface IBLLService
{
	[OperationContract]
	string GetData(int value);

        ...
}

[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single)]
public class BLLService : IBLLService
{
	public IDataLayer dataLayer;

        public string GetData(int value)
	{
		return dataLayer.GetData(value);
	}
}



DAL bzw Windows Service


List<Entity> entityList = new List...
...

ServiceHost wcfHost;
BLLService service = new BLLService();
service.dataLayer = this;
wcfHost = new ServiceHost(service, addressCollection);
wcfHost.Open();

...

public string GetData(int number)
{
    //entityList.Add(ent); oder irgendwas anderes mit der Liste
    return "blabal" + number.ToString();
}
...

Soweit funktioniert es eigentlich auch schon, nur hab ich noch ein paar Fragen:

  1. Ich werde wohl relativ viele Funktionen in der BLL haben, normalerweise würde ich die in verschiedene Klassen unterteilen...dann brauch ich aber auch zu jeder Klasse einen eigenen WCF-Service oder gibts da noch ne bessere Methode?
  2. Muss die DAL bzw die BLL thread-safe programmiert werden? Ich konnte nichts finden, wie die WCF das handhabt...wie oben zu sehen ist die BLL ein Singleton (falls das irgendwie wichtig ist)
  3. Irgendwelche generellen Verbesserungsvorschläge?
S
8.746 Beiträge seit 2005
vor 16 Jahren
  1. Ich werde wohl relativ viele Funktionen in der BLL haben, normalerweise würde ich die in verschiedene Klassen unterteilen...dann brauch ich aber auch zu jeder Klasse einen eigenen WCF-Service oder gibts da noch ne bessere Methode?

Ein Service umfaßt i.d.R. alle zusammengehörigen Typen.

  1. Muss die DAL bzw die BLL thread-safe programmiert werden? Ich konnte nichts finden, wie die WCF das handhabt...wie oben zu sehen ist die BLL ein Singleton (falls das irgendwie wichtig ist)

Das ist nicht zwingend aber sinnvoll. Du kannst natürlich auch eine Synchronisation in der Service-Schicht basteln (bzw. WCF das machen lassen).

A
altertoby Themenstarter:in
61 Beiträge seit 2005
vor 16 Jahren

danke für deine schnelle Antwort

zu 1.:
ok, dann brauch ich aber für jede Klasse, der ja dann einen eigenen Service-Contract darstellt, einen eigenen Endpunkt richtig? Oder kann man mehrer Klassen/Interfaces zu einem Contract zusammenfassen?

zu 2.:
kannst du mir einen Link geben bzw mir erklären, wie man die "WCF das machen lassen" kann?
Am besten wäre, wenn ich Multi-Threading verhindern könnte... zumindest aus der Sicht der Programmierung (keine Sorgen über Race Condition und Deadlocks...).
Leidet die Performance darunter sehr?

Ah ich sehe gerade... dass müsste dann ConcurrencyMode sein?