2009-04-24 4 views
1

Ich baue eine Anwendung, die ihre Verarbeitung über eine Farm verteilt. In meinem grundlegenden Design habe ich zwei Dienste:WCF für alle Fälle richtig?

Ein "Controller", der für neue Arbeit aufpasst, stellt es auf und verwaltet die Ergebnisse.

Ein "Arbeiter", der an einen bestimmten Controller bindet. Der Arbeiter wird die Arbeit von seinem Controller überprüfen und die Ergebnisse zurückschieben.

Im Breif-Look, den ich bei WCF hatte, scheint es eine MEST-Stil Message-Übergabe SOA impliziert. Dieser Mechanismus scheint nicht mit den Arten der Kommunikation zu interagieren & Koordination werde ich tun.

Bin ich verwechselt, was WCF ist? Gibt es in dieser Welt noch einen Platz für .NET Remoting? Oder denke ich über das Problem in einer jurassischen Vor-WCF-Denkweise nach.

Bearbeiten:
Haben einige Details weggelassen. Das reiben ist, dass ich die Arbeit Timebox muss. Wenn ein Workitem zu lange ausgecheckt wird, sollte ich in der Lage sein, das Ganze zu verfälschen. Die Beispiele, die ich gesehen habe, scheinen eine "Sende-und-Vergessen-Haltung" gegenüber den ausgehenden Nachrichten zu haben. Ich brauche ein deterministisches Ergebnis oder einen Fehler in einem vernünftigen Zeitrahmen. Hoffe das klärt sich.

Antwort

3

Ich empfehle Remoting für die meisten Szenarien nicht; es ist nicht portabel, manchmal etwas schmerzhaft zu handhaben, und BinaryFormatter ist brüchig (Version intolerant).

WCF ist eine ziemlich gute Lösung für die meisten Fälle; Wenn Sie auf einer Farm arbeiten, möchten Sie wahrscheinlich ohne Sitzungen usw. laufen, aber ich mache das trotzdem (für die Leistung) - nur mit dem http-Basisprofil.

Ich verstehe das Szenario, das Sie beschreiben, nicht vollständig. Natürlich können Sie immer Ihren eigenen RPC unter Verwendung von xml/json/binary - oder verwenden Sie einen der anderen vorgefertigten Comms Stacks ... oder Middleware wie MSMQ oder BizTalk.


Re die Bearbeitung; WCF kann synchron verwendet werden (Blockierung der Antwort mit (ich glaube) einem konfigurierbaren Timeout). Sie können komplexere Dinge (Rollback usw.) mit verteilten Transaktionen usw. ausführen, aber es erhöht die Komplexität schnell. Sie müssen die Wichtigkeit der Drop-Dead-Zeit usw. abwägen.

Wenn der Zeitrahmen länger ist als Sie auf einen Aufruf warten möchten, könnten Sie auch Dinge wie Workflow in Betracht ziehen - es gibt eine Reihe von Workflow-Produkte rund um, zusätzlich zu WF.