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
@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):
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 .
quelle
Derzeit wird davon ausgegangen, MVC Web API anstelle von WCF für REST zu verwenden. http://stephenwalther.com/blog/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx
Das Entwicklungsmodell ist ziemlich nahe und Sie umgehen die manchmal unangenehme Konfiguration von WCF.
quelle