ASP.NET MVC vs WCF für die Verwendung von REST API + Webseiten


14

Ich denke, die Diskussion über programmatische serviceorientierte Nutzung im Vergleich zu menschlicher Interaktion ist klar.

Wenn ich jedoch eine Anwendung erstellen würde, die sowohl eine programmgesteuerte API als auch eine Website verwendet, die die Daten verwendet, die über dieselbe API verbunden sind, würde ich dann eher ASP.NET verwenden?

Wie einfach ist es, ASP.NET und WCF zu integrieren, um mit derselben Anwendung zu arbeiten?

Antworten:


11

Was das Schreiben einer Anwendung betrifft, die sowohl ASP.NET/MVC als auch WCF nutzt, ist dies nicht besonders gut. WebAPI hat sich möglicherweise verbessert, aber in einem Projekt, das WCF und MVC in derselben App verwendet, wurden letztendlich zwei verschiedene Modellsätze verwaltet, um dieselben Konzepte darzustellen - eines für den WCF-Code und eines für die MVC Code. Sie können sich alle Mapper vorstellen, die sie schreiben mussten, um die Dinge zwischen den beiden Modellen zu übersetzen - es gab viele Codezeilen, die hätten vermieden werden können / sollten.

Ein Grund dafür ist, dass WCF-Anforderungs- und -Antwortobjekte mit [DataContract] und ihre Eigenschaften mit [DataMember] kommentiert werden sollten, während MVC dies nicht erfordert. Idiomatic MVC hingegen möchte ViewModels, die andere Ziele verfolgen als WCF DataContracts. Es ist natürlich möglich, dass die Verwendung von zwei vollständigen Sätzen von Domänenobjekten mehr mit dem Conway-Gesetz zu tun hat als mit Konflikten zwischen WCF und MVC, aber es sollte darauf hingewiesen werden, dass WCF und MVC unterschiedliche Ziele und Anforderungen in Bezug auf Ausgabe und Eingabe haben.

Persönlich bin ich teilweise an der Entwicklung einer einfachen, aber leistungsstarken, serviceorientierten Back-End-API interessiert, insbesondere wenn Sie mehrere Clients benötigen. Ich denke, das Aufkommen exzellenter JavaScript-MVVM- und Micro-MVC-Frameworks macht dies zu einer natürlichen Wahl, da das Schreiben von Anwendungscode unter Verwendung von BackboneJS , KnockoutJS und anderen eine leistungsfähige Entwicklungsumgebung ermöglicht. Sie können dann das Back-End in der Micro-MVC Ihrer Wahl verwenden, um Ihre Web-App zu erstellen, oder auf einem mobilen Client, und Ihre Partner können dieselbe API auch remote verwenden.

Vorschlag

Entweder WebAPI oder Service Stack sind gute Kandidaten für die Erstellung Ihrer Back-End-API. Ich empfehle Service Stack, da ich es in den letzten Monaten verwendet habe und es als hervorragenden Ersatz für WCF empfunden habe. Momentan schreibe ich eine Tutorial-Serie über Service Stack in meinem Blog .

Die Gruppe, die den Service-Stack verwaltet, hat eine Beispielanwendung veröffentlicht, die das Framework verwendet, um einen StackOverflow-ähnlichen Klon zu entwickeln, der ein Entwicklungsmuster zeigt, das meiner Meinung nach besonders überzeugend ist. Es handelt sich um ein einfaches, modellbasiertes Service-Back-End, das Sie sich vorstellen können, wenn Sie von einer MVC-Website, einer mobilen App oder einfach von irgendetwas anderem genutzt werden. Die Designziele von ServiceStack fördern eindeutig ein Muster, das zu einer geringeren Kopplung zwischen Client und Server führen sollte. Die Idee ist, gesprächige APIs mit Aufrufen zu vermeiden, die GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)weniger Methoden bevorzugen. Sie können dasselbe im Service-Stack wie folgt implementieren:

[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers 
{
    public int? RegionId { get; set; }
    public string SearchTerm { get; set; }
}

public class CustomersService : Service
{
    public object Get(Customers request) {
        // handle request
        return new CustomersResponse();
    }
}

Der Vorteil, in meinen Augen ist, dass statt sich über viele Geschäftslogik Verbreitung haben und viele verschiedene Methoden GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm), GetCustomersInRegion(int regionId), GetCustomersWithSearchTerm(string searchTerm), GetCustomers(), es ist alles an einem Ort. Dies sollte zu besser wartbarem Code führen.

Zufälligerweise hat Stack Exchange den ursprünglichen Service Stack- Autor eingestellt . Er engagiert sich weiterhin aktiv für das Service Stack-Projekt.

Ich mag besonders Nachrichtenwarteschlangen für bestimmte Dinge - und während WCF dies zulässt, tut WebAPI dies nicht. Mit ServiceStack kann derselbe Webdienst über MQ aufgerufen werden. Weitere Informationen hierzu finden Sie beim Redis MQ-Host unter: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis


Hinweis: ServiceStack ermöglicht, dass derselbe Webdienst über MQ aufgerufen werden kann.
Weitere Informationen finden

Exzellent, danke @mythz! Ich wusste das nicht.
Kyle Hodgson

aber es scheint, als würde mvc4 die Route der Web-API einschlagen ... ist das nicht das "offiziell gesponserte" Framework?
Xster

Nachdem ich in den letzten zwei Jahren mit dem "offiziell gesponserten Framework" (WCF pre WebAPI) gerungen habe, ist dies nicht mehr Teil meiner Auswahlkriterien. Das heißt nicht, dass WebAPI gut oder schlecht ist, ich habe es noch nicht ausprobiert. Ich habe kein Verlangen danach verspürt, ServiceStack löst meine Probleme.
Kyle Hodgson

3
Hier das Offensichtliche anführen, aber ViewModels und Antwortobjekte von WCF-Diensten sind zwei völlig separate Dinge. Ein ViewModel kann nur eine Teilmenge von Daten oder Teile von Daten aus verschiedenen Quellen sein. Ein anderer Satz von Objekten für ViewModels ist genau das, was für MVC benötigt wird, woher die Daten stammen (WCF oder auf andere Weise), spielt keine Rolle. Es gibt auch Automapper für die Zuordnung zwischen Objekttypen, um den gesamten Boilerplate-Code von X.Name = Y.Name zu speichern.
ozz

4

@tzerb hat es richtig beantwortet IMO, aber ich wollte diese Antwort erweitern. Die ASP.NET-Web-API, die sich derzeit in der Betaphase befindet und ein OSS-Projekt ist, ist das nächste Framework, das Sie suchen.

Die kurze Beschreibung des Produkts lautet wie folgt (zitiert von der ASP.NET-Web-API- Seite):

Die ASP.NET-Web-API ist ein Framework, mit dem sich auf einfache Weise HTTP-Dienste erstellen lassen, die eine breite Palette von Clients erreichen, einschließlich Browser und Mobilgeräte. Die ASP.NET-Web-API ist eine ideale Plattform zum Erstellen von RESTful-Anwendungen in .NET Framework.

Bei der Clientanwendung, mit der Sie möglicherweise Ihre Web-API verwenden, muss es sich sicherlich nicht um eine ASP.NET-Anwendung handeln. Sie können Ihre API mit einer statischen HTML-Seite verwenden, indem Sie JavaScript verwenden. Mit einigen nützlichen JavaScript-Bibliotheken wie jQuery können Sie dies problemlos erledigen.

Auf der anderen Seite können Sie Ihre API auf der Server-Site in jeder ASP.NET-Anwendung verwenden. Das Web-API-Projekt führte auch eine neue HTTP .NET-Client-API mit dem Namen HttpClient ein, mit der HTTP-Dienste auf einfache Weise verwendet werden können.

Im Allgemeinen finden Sie hier eine Reihe von Ressourcen, mit denen Sie beginnen können:

Erste Schritte mit der ASP.NET-Web-API - Lernprogramme, Videos, Beispiele

Denken Sie daran, dass sich das Projekt noch in der Beta-Phase befindet. Ich empfehle Ihnen, dem Blog von Henrik F Nielsen zu folgen, in dem er Informationen zu den neuesten unveröffentlichten Updates des Projekts veröffentlicht. Sie können den Quellcode des Projekts und den Entwicklungsablauf innerhalb des ASP.NET Web Stack-Projekts abrufen .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.