2012-04-01 4 views
3

Die Frage ist ziemlich im Titel, aber ich werde es ausarbeiten.Eine oder mehrere AppDomains, die serverseitig erstellt wurden, wenn mehrere Clients einen WCF-Dienst aufrufen?

Ich habe eine Silverlight-Anwendung, die als eine leicht erweiterte Benutzeroberfläche fungiert.

Der Hauptteil meines Programms wird auf einem Server laufen, um die gemeinsame Datenbank kohärent zu halten.

Hier kommt meine Frage: Erhalten zwei Clients, die einen WCF-Dienst aufrufen, jeweils einen Thread in diesem Dienst ODER erhalten sie jeweils eine vollständige AppDomain?

Der Unterschied ist, dass wenn die erste der Fall ist, sie die DB leicht teilen können, aber im zweiten Szenario können sie nicht - wie ich es verstehe.

BEARBEITEN: Dies liegt daran, dass die DB das Identity Map Muster [Fowler] verwendet, wo verwendete Objekte im physikalischen Speicher gespeichert werden (statische Singleton Variable) - mehrere AppDomains würden dies durcheinander bringen.

(bat ich meinen Hochschullehrer und suchte einiges bevor diese zu fragen, scheinbar einfache Frage)

+0

Diese Frage kann eine gewisse Beziehung haben, obwohl ich nicht mehrere appdomains eingerichtet habe: http://stackoverflow.com/questions/7984803/multiple-instances-of-service-across-appdomains –

+0

Jede eingehende Anfrage wird erhalten eine eigene neue Instanz der Dienstklasse, um die Anfrage zu bearbeiten (im Standard-Szenario pro Anruf) - aber keine eigene App-Domäne, soweit ich weiß. Also zwei Anfragen werden zwei separate, unabhängige Kopien der Service-Klasse sein –

Antwort

1

Das Threading-Modell für WCF-Dienste durch die ConcurrencyMode Sie für Ihren Dienst so konfigurieren, bestimmt: http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode.aspx.

In Bezug auf AppDomains - das hängt ganz davon ab, wie Sie Ihren Dienst hosten. Wenn Sie manuell einen eigenen ServiceHost ausführen, wird auf der Serverseite immer genau eine Anwendungsdomäne vorhanden sein, es sei denn, Sie möchten mit der Verwaltung beginnen und Ihre eigenen starten.

Wenn Sie in IIS hosten ... hängt es von IIS ab, wie Anfragen verarbeitet werden. Es kann 1 Anwendungsdomäne erneut verwenden, es kann mehrere Anwendungsdomänen hochfahren (es sei denn, Sie überschreiben die Einstellung in der Datei web.config, um nur 1 Anwendungsdomäne pro Arbeitsprozess zuzulassen) oder es können mehrere physische Arbeitsprozesse (die mehrere Anwendungsdomänen impliziert) ausgeführt werden Sie haben den Web-Garten-Modus aktiviert.

All dies gesagt, ich bin mir nicht sicher, warum genau dies Ihre Datenzugriffsstrategie beeinflussen würde. Mehrere Threads oder AppDomains sollten keine Probleme bei der Freigabe einer Datenbank haben.

+0

Also, wenn ich nicht ausdrücklich IIS wählen wird es nur eine AppDomain, in der jeder aufrufende Thread auf die gleichen Singletons wie die anderen zugreifen kann? (Ich hätte präziser in meiner Frage sein sollen; ich habe ein ID-Map-Muster - ich habe es so bearbeitet) –

+1

Es ist wirklich das eine oder andere: IIS oder Self-Hosting .... Sie müssen immer wählen. ... Beim Umgang mit IIS sind statische Daten (oder Singletons) aus den genannten Gründen in der Regel gefährlich. Mit Self-Hosting haben Sie es mit genau einer AppDomain zu tun, also ist es kein Problem Singletons zu teilen. – Jeff

Verwandte Themen