2008-10-24 6 views
39

Was ist die beste Vorgehensweise zum Schreiben eines ziemlich großen WCF-Dienstes, der viele OperationContracts und DataContracts enthält?Best Practice für große WCF-Service?

Wie würde ich trennen Funktionsbereiche in mehrere Verträge, wäre es am besten, einen Endpunkt für jeden Funktionsbereich zu schaffen?

Gibt es eine Möglichkeit, die Quelle für die verschiedenen Teile auseinander zu halten, aber immer noch verwendet nur einen Service für alle von ihnen?

Woher bekomme ich gute Informationen, wie man die Verträge plant, was zu integrieren, wie teilt man ...?

Antwort

16

Das war eine große Frage rund um Dienstleistungen seit ihrer Gründung. SOA erfolgreich durchgeführt wird SOA geplant in dem Umfang, über den Sie sprechen. Nachdem ich das gesagt habe, habe ich mich immer mehr darauf konzentriert, Dienste zu splitten, aber sie in einer zusammengesetzten Weise zu verwenden. Das heißt, mehrere Endpunkte, wenn Sie mehrere Verträge haben, aber die meisten von ihnen werden nur von einigen Endpunkten verbraucht, die von Nicht-Service-Anrufern konsumiert werden. (Wow, das war ein Schluck, habe es sogar sinnvoll?)

Außerdem würde ich raten, so wenig Verträge wie möglich zu haben. Zu viele Verträge können zu einer schlechten Verwaltbarkeit führen. Eine gute Vertragsgestaltung hilft, die Anzahl der Endpunkte und Serviceanrufe zu begrenzen. Das Entfernen von OO-Konzepten aus der Vertragsgestaltung ist eine Möglichkeit, dies zu tun. Contract Design ist ein riesiges Thema für sich, aber es genügt zu sagen, dass durch gute Vertragsplanung (im Vorfeld) ein gutes Service Design entsteht.

Maarten Mullender writes a great blog auf WCF-Design und ist ein Muss lesen. Es gibt auch einige großartige SOA/WCF-Bücher.

Einige gute Bücher:

+0

ich mit den meisten zustimmen. Und unbedingt den Blog von Maarten Mullender zu Ihren Feeds hinzufügen! – user9991

+0

toll, danke - Der Blog hinzugefügt, lesen Sie jetzt durch das Archiv! – Sam

5

Das hat mir nützlich gewesen, es von der idesign.net Website kommt und es wurde von Juval Löwy Autor:

WCF Coding Standard

+1

URL hat sich geändert http://idesign.net/Downloads/GetDownload/1987 oder was ich getan habe http://idesign.net/Downloads und es ist in der Misc Abschnitt gefunden – PJUK

5

Ich werde hier von der Spur abgehen und sagen, dass ich monolithische WCF-Verträge, funktional getrennte Verträge (mit maximal zehn Methoden nach Juvals Richtlinien in seinem Buch) verwendet habe, und ich habe auch versucht, eine Message-Handling-Architektur, wo ein Service verfügt über eine einzige Methode, die eine Basisnachricht annimmt, und über Handler, die wissen, wie sie die Nachricht nach dem Überqueren der Leitung auspacken und verarbeiten können.

Ich bin ein großer Fan von letzterem, wenn Sie .NET auf beiden Seiten des Zauns haben. Oren hat einen Screencast über die Idee mit Code. Ich weiß nicht, was deine Bedürfnisse sind, aber das funktioniert für mich.

http://ayende.com/Blog/archive/2008/03/30/Hibernating-Rhinos-8--Going-Distributed-amp-Building-our-own.aspx

Das hieß, wenn Sie bereits aus kommen „Ich brauche einen großer WCF-Dienst“ dann zu einem Verfahren gehen wird wahrscheinlich nicht für Sie geht zu schneiden. Wenn das stimmt, dann ist Juval Lowy's Programming WCF Services der Standard, den Sie in Ihrem Design beibehalten sollten.

4

Ich habe einen Beitrag hier darüber, wie einzelne Operationen von herkömmlichen Code Operationen unterscheiden sollte:

http://www.iserviceoriented.com/blog/post/Introduction+to+Service+Oriented+Architecture.aspx

Sie nur mit Operationen für die tatsächliche geschäftliche Veranstaltungen sollten am Ende. Wenn Sie einmal aufhören und denken: "Ich muss die Transaktionsunterstützung für meinen Webdienst aktivieren", bedeutet das, dass Sie die Operation nicht mit einem ausreichend großen Umfang entworfen haben. Sie sollten die Web-Service-Transaktionsunterstützung nie aktivieren müssen.

Ich empfehle Bill Pooles Blog für höhere SOA-Konzepte. Hier ist ein Beitrag, um loszuzulegen:

http://feeds.feedburner.com/~r/BillPoolesCreativeAbrasion/~3/328955489/service-contract-stability.html

0

Ich weiß, dass dies eine alte Post, aber ich denke an Dienstleistungen in der gleichen Art und Weise, wie ich von Objekten in der Programmierung denken.

Halten Sie sie für das, was sie tun müssen, auf ihr absolutes Minimum. Natürlich nicht bis zum Äußersten, aber ich treffe meine Entscheidungen basierend auf Dateneinheiten.

Ein Service für Konto, eine für Produkt usw.

nicht sicher, was jemand allerdings daran denken würde ...