2012-04-03 3 views
1

Hallo,WCF mit PerCall, SessionMode.NotAllowed, Rückruf?

Ich habe einen Dienst, der die folgenden heute

  • NetTcpBinding (WAS)
  • Hosted In IIS7
  • PerSession Dienst
  • verwendet SessionMode.Required
  • Rückrufe
  • Singelton auf ser Laster, die alle Client hält Kontexte

sagen, dass ich jetzt diese zu PerCall ändern müssen instanziiert und SessionMode.NotAllowed ist dies posible ohne über irgendwelche meiner Schlüssel functionalitys zu verlieren?

Ich habe gesehen, dass TCP ein Session-gebundenes Protokoll ist und das bedeutet, dass ich HTTP Binding verwenden muss, das nicht so schnell ist wie TCP (XML 1.0 Encoder anstelle von Binary Encoder). Aber ich bin immer noch nicht sicher, ob dies zum Beispiel Callbacks unterstützt?

Antwort

1

PerCall und SessionMode.NotAllowed sind "weniger" spezifisch/restriktiv als Ihre aktuelle Konfiguration. Sie sollten leicht in der Lage sein, zu diesen Einstellungen überzugehen, solange Sie die grundlegenden Auswirkungen erkennen: Zwischen den Aufrufen in Ihren Serviceinstanzen gibt es keine Statuswechsel mehr.

Das sagte, ich bin mir nicht sicher, ich verstehe, was Sie unter "Singleton auf Service, der alle Client-Kontexte" bedeutet. Kannst du es ausarbeiten? Ich denke, du meinst deinen Haltezustand in einem Singleton (statisches Feld?) In der Service-Implementierung. Der Zugriff auf diese von den PerCall Instanzen wird in Ordnung sein, denken Sie daran, dass Sie die Sperre um diesen Zustand bereitstellen müssen. So können Sie beispielsweise die Liste der Rückrufe verwalten.

Auch Ihr Verständnis davon, dass TCP nur Sitzung ist, ist falsch. Denken Sie daran, HTTP ist ein Protokoll, das auf TCP aufgebaut ist. Ja TCP-Sockets bleiben für eine gewisse Zeit verbunden (am Leben halten), so dass sie wiederverwendet werden können, aber die Nachrichten, die Sie über sie senden, können völlig unabhängig voneinander sein. Also, wenn Sie bei NetTcpBinding bleiben, werden Sie in Ordnung sein. Ebenso können Sie Sitzungen über den HTTP-Transport technisch durchführen. Wenn Sie zu einem HTTP-basierten Transport gewechselt haben, verwenden Sie nicht , um Textcodierung zu verwenden. Sie können binären Inhalt über den HTTP-Transport senden, es erfordert nur das Einrichten einer benutzerdefinierten Bindung, die etwa wie folgt aussehen würde:

+0

Wie könnte ich Sessionless mit netTCP runt? – Banshee

+0

Wenn du "sessionless" sagst, über welches Level sprichst du? Wenn Sie einfach in den PerCall-Modus wechseln, gibt es keine logische WCF-Sitzung mehr. Das heißt, dass Ihre TCP-Verbindungen weiterhin eine Sitzung mit dem Server führen, um mehrere Anrufe so effizient wie möglich zu verteilen. Diese Einstellungen werden durch die Einstellungen in der NetTcpBinding selbst über die MaxConnections -Eigenschaft, die einen Standardwert von 10 hat gesteuert. –

+0

Okay, aber ich meine auf der Service-Schnittstelle, wenn ich SessionMode.NotAllowed dann netTCP scheint nicht funktionieren? – Banshee

Verwandte Themen