August 2013

Volume 28 Number 08

.NET Web Services - Erstellung von Cross-Plattform-Webservices mit ServiceStack

Ngan Le | August 2013

Ich gerne arbeite mit Windows Communication Foundation (WCF), denn es hervorragende Unterstützung für das Framework in Visual Studio.Ich finde es ziemlich einfach zu einen WCF-Webdienst von Grund auf neu erstellen und erhalten er auf und läuft in meiner Entwicklungsumgebung ohne zusätzliche Tools und verteilbaren Dateien installieren.Ich werde meine Erfahrungen mit Cross-Plattform-Entwicklung hier erörtern, so dass Sie in diesem Artikel interessiert sein könnte, wenn die folgenden Aussagen gelten:

  • Sie sind bereits vertraut mit WCF und c#.
  • Du musst einen Cross-Plattform-Webdienst erstellen.

Ich denke, wir sind uns alle einig, dass die Cross-Plattform-Anwendungen zu schreiben die allerwenigsten Unannehmlichkeiten, aber manchmal unvermeidbar ist.Wenn Sie alles wie ich sind — Windows gebunden und stark investiert in c# — Zusammenstellung einen Cross-Plattform-Webdienst erheblichen Aufwand mit sich bringen könnte.Dazu gehören Neukonfiguration Ihrer Geliebten Windows-computing-Umgebung angepasst ein völlig anderes set von Entwicklungswerkzeugen und möglicherweise noch eine andere Programmiersprache lernen.In diesem Artikel werde ich zeigen, wie Sie der WCF-Gestalt des ServiceStack (ein quelloffenes .NET und Mono-REST Web Service Framework), eine solche Aufgabe zu erreichen, ohne jemals aus Visual Studio nutzen können oder die Microsoft .NET Framework Umgebung.

Über Webservices

Ein typischer Web-Service ist angelegt wie in Abbildung 1.

typische Web-Service-Layout
Abbildung 1-typische Web-Service-Layout

Die Dienstschicht ist, in dem Sie Ihre Web-Service-Schnittstelle definieren.Dies ist die einzige Schicht, die mit der der Client, um den Webdienst zu verbrauchen interagieren muss.

Die Geschäftsschicht ist offensichtlich in der Regel schwer mit Business-Logik.Dies ist, wo das Fleisch Ihrer Web-Service-Implementierung befindet, halten Ihren Dienst legere Licht und Client/Server-Verträgen und Kommunikation im Mittelpunkt.

Die Datenschicht soll Kapseln Ihre Datenzugriff und Manipulation von Grafiken auf der Geschäftsebene abstrahierte Datenmodelle vorzusehen.

In diesem Artikel konzentriere ich mich auf die Dienstschicht.

Remoteprozeduraufrufe gegenüber Data Transfer Objects

Einige Webdienste Vorgehen der Remote Procedure Call (RPC), wo soll jede Anforderung ein Funktionsaufrufs ähneln:

public interface IService {
  string DoSomething(int input);
}

Der RPC-Ansatz dazu neigt, den Webdienst anfälliger für wichtige Schnittstellenänderungen machen.Z. B. in der vorhergehenden Codeausschnitt, wenn eine neuere Version von der Web-Dienst erfordert zwei Eingänge vom Client die Methode DoSomething ausgeführt — oder ein anderes Feld neben der String-Wert zurückgeben muss — eine unterbrechende Änderung für alte Clients ist unvermeidbar.Natürlich können Sie immer eine parallele DoSomething_v2-Methode, um zwei Eingabeargumente zu nehmen, aber im Laufe der Zeit, die Ihre Web-Krempel würde service-Schnittstelle und Risiko verwirrend Ihre Konsumenten, alte und neue erstellen.

Volksweisheit bevorzugt definierende Webdienstschnittstellen richtet sich an das Data Transfer Object (DTO)-Modell.Der folgende Code zeigt, wie die Webmethode DoSomething unter dem DTO-Modell umgewandelt werden kann:

public class DoSomethingRequest {
  public int Input { get; set; }
}
public class DoSomethingResponse {
  public string Result { get; set; }
}
public interface IService {
  DoSomethingResponse DoSomething(DoSomethingRequest request);
}

Nach dieser Denkrichtung jede Web-Methode akzeptiert eine einzelne Anforderung DTO und gibt eine Antwort DTO.Die Idee ist, dass das Hinzufügen von neuen Feldern auf die Anforderung DTO und Antwort DTO ältere Clients nicht brechen.

Es ist erwähnenswert, dass RPC-Stil und DTO-Stil Web Service-Interfaces von WCF unterstützt werden, aber ServiceStack nur den DTO-Stil unterstützt.ServiceStack umfasst das Prinzip der entfernten DTO-Stil des Web-Service-Interfaces für weniger Funknetzen und weitere Chunkiness in der Web-Service-Interface-Design.Dies ist Schlüssel zum Verständnis von ServiceStack, da Rahmen in einer Weise ausgelegt ist, die das Prinzip stärkt.

Was ist ServiceStack?

Wie bereits erwähnt, ServiceStack ist ein open-Source, Cross-Plattform-Mono-Web-Service-Frameworks, und es ist an Popularität gewinnt.Webdienste mit ServiceStack können in einer Windows-Umgebung mit .NET-Code oder in einer Linux-Umgebung mit Mono-Unterstützung ausgeführt.Die von Mono unterstützte Betriebssysteme sind:

  • Linux
  • Mac OS X, iOS
  • Sun Solaris
  • BSD
  • Microsoft Windows
  • Nintendo Wii
  • Sony PlayStation 3

Weitere Informationen über die vom Mono unterstützten Plattformen finden Sie unter Mono-project.com/Supported_Platforms.

Wenn Sie mag die Arbeit mit dem .NET Framework und WCF und benötigen Ihre .NET Web-Services in einer Umgebung als Windows bereitstellen, ist ServiceStack eine ideale Wahl.Wegen der Ähnlichkeit von ServiceStack und WCF müssen beim Übergang von einem zum anderen wenig Anpassung in Bezug auf die Entwicklungsumgebung und Tools.Sie erhalten weiterhin Schreiben von c#-Code in Visual Studio.

ServiceStack erzwingt remote Web Best Practice, Übereinkommen basierende DTO Servicestandards für seine Web-Service-Schnittstelle, während WCF es Ihnen überlässt, eine Webdienst-API frei zu definieren, wie Sie es für richtig halten.ServiceStack bietet auch ein Out-of-Box-Antwort-Status-Objekt, das verwendet werden kann, die Antwort DTO, fördern eine direkte und einfache Fehlerbehandlung-Regelung zu komponieren.Obwohl dies leicht mit WCF implementiert werden kann, ist es keine offensichtliche Route.Neuere Versionen von ServiceStack bieten auch einen Ausnahme-basierten Mechanismus zur Fehlerbehandlung, das ähnlich ist – allerdings nicht als Sophis­Ticated als — WCF verschuldensabhängige Fehlerbehandlung über Fehlerverträge.

Die Standards, die durch ServiceStack erzwungen werden problemlos in WCF mit ein wenig zusätzliche Eingabe implementiert.Allerdings ist neben der Portabilität, ServiceStack eine praktikable Option für einen RESTful Web-Dienst zu erstellen, da es sich um Konventionen festlegt, die HTTP-URI, die Weiterleitung zu vereinfachen.Zur gleichen Zeit zwingt ServiceStack jeder Web-Service-Anforderung in einer separaten Klasse umgesetzt werden fördern eine natürliche Trennung von Bereichen für ein Modell des Rest-Diensts.

ServiceStack bietet auch andere Vergünstigungen wie Out-of-Box-Protokollierung und Basisdaten-Validierungs-Dienstprogramm.Erfahren Sie mehr über ServiceStack bei Servicestack.NET.

In diesem Artikel wird davon ausgegangen, dass Sie eine gewisse Vertrautheit mit WCF und .NET Framework haben.Um besser zu veranschaulichen, wie WCF-Konzepte ServiceStack-Konzepte übersetzen können, werde ich zunächst die Dienstschicht in WCF implementieren.Dann zeige ich Ihnen, wie Sie WCF-Webdienst in einen Cross-Plattform-Webdienst zu verwandeln, indem die Portierung auf ein gleichwertiger Webdienst mit ServiceStack.

Erstellen eines einfachen WCF-Webdienstes

Um zu demonstrieren wie ServiceStack als Ersatz für WCF in einer Multiplattform Umgebung dienen kann, fange ich mit einem einfachen WCF-Webdienst.

Der Webdienst ist eine triviale Restaurant-ticketing-System namens TicketService, die den folgende Dienstvertrag implementiert:

[ServiceContract]
public interface ITicketService {
  [OperationContract]
  List<Ticket> GetAllTicketsInQueue();
  [OperationContract]
  void QueueTicket(Ticket ticket);
  [OperationContract]
  Ticket PullTicket();
}

Der TicketService ermöglicht seinen Kunden, in die Warteschlange eines neuen Tickets, ziehen Sie ein Ticket aus der Warteschlange und eine vollständige Bestandsaufnahme der alle Tickets zur Zeit in der Warteschlange abzurufen.

Der Web-Dienst besteht aus drei Visual Studio -Projekte, wie in gezeigt Abbildung 2(läuft mein Beispiellösung, die heruntergeladen werden kann archive.msdn.microsoft.com/mag201308Services, erfordert Visual Studio 2012 mit Web-Entwickler-Tools und das .NET Framework 4.5).

WCF Ticket-Service- Visual Studio -Projekte
Abbildung 2 WCF Ticket-Service- Visual Studio -Projekte

Die drei Projekte werden kurz wie folgt beschrieben:

  • Das TicketSystem.ServiceContract-Projekt wird die Service-Schnittstelle definiert.
  • Das TicketSystem.TicketProcessor-Projekt enthält die Einzelheiten die Implementierung von Web-Service-Business-Logik.Dieses Projekt enthält keine Verweise auf WCF.
  • Das WcfServer-Projekt implementiert Ticket­System.ServiceContracts und Hosts im Web-Dienst in IIS.

Ich habe auch einen WCF-Client um den TicketService zu konsumieren.Der WCF-Client ist eine Konsolenanwendung, die von Hinzufügen eines Dienstverweises WCF an den TicketService generierte Code wird verwendet, um die Kommunikation mit dem Web-Dienst mit SOAP über IIS.Hier ist die Client-Konsole-Implementierung:

static void Main(string[] args) {
  Console.Title = "WCF Console Client";
  using (TicketServiceClient client = new TicketServiceClient()) {
    Ticket[] queuedTickets = client.GetAllTicketsInQueue();
    foreach (Ticket ticket in queuedTickets) {
      PrintTicket(ticket);
    }
  }
}

Die Client-Code-Implementierung serviert die Angaben der Abbildung 3.

die WCF-Konsolenclient
Abbildung 3 die WCF-Konsolenclient

Einen entsprechende ServiceStack-Webdienst erstellen

Voraussetzung für die Arbeit mit ServiceStackum mit ServiceStack zu arbeiten, zuerst müssen Sie die verteilbaren Dateien herunterladen.Der einfachste Weg, dies zu tun ist durch die NuGet Visual Studio -Exten­Sion, mit dem Sie leicht installieren und Aktualisieren von Drittanbieter-Bibliotheken und Tools.Sie können herunterladen und installieren Sie den Client NuGet aus nuget.codeplex.com.Nachdem NuGet installiert ist, Sie sehen in Visual Studio das Menü Posten im Abbildung 4.

der NuGet- Paket-Manager -Konsole im Visual Studio
Abbildung 4 der NuGet- Paket-Manager -Konsole im Visual Studio

Jetzt werde ich tun, eine Schritt für Schritt Anleitung wie man einen ServiceStack-Webdienst erstellen, der die WCF-Webdienst entspricht, die ich zuvor gebaut.

Erstens nehmen Sie die WCF-WEBDIENSTBEISPIEL als Ausgangspunkt.Entfernen Sie die WcfClient und die WcfServer-Projekte aus der Projektmappe.Diese Projekte beziehen sich auf WCF, und sie werden später mit ServiceStack-kompatible Projekte ersetzt werden.

Wählen Sie im Fenster Paket-Manager -Konsole das TicketSystem.ServiceContract-Projekt.An der Eingabeaufforderung geben Sie "Install-Paket ServiceStack," wie im Abbildung 5.

ServiceStack Redistributables mit NuGet Paket-Manager installieren
Abbildung 5 ServiceStack Redistributables mit NuGet Paket-Manager installieren

Dieser Schritt lädt die neuesten verteilbaren Dateien notwendig, einen .NET Web Service mithilfe von ServiceStack zu bauen.Die verteilbaren Dateien werden unter einem Ordnernamen inszeniert, die "Pakete" im Stammordner Ihrer Visual Studio -Lösung gelegt.Darüber hinaus werden die DLL-Verweise für das TicketSystem.ServiceContract-Projekt hinzugefügt.Damit ist eine packages.config-Datei in den Stammordner des Projekts erstellt mit Version und Common Language Runtime Informationen für jede ServiceStack-DLL:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ServiceStack" version="3.9.46" 
    targetFramework="net45" />
  <package id="ServiceStack.Common” version=“3.9.46”
    targetFramework="net45" />
  <package id="ServiceStack.OrmLite.SqlServer" version="3.9.45"
    targetFramework="net45" />
  <package id="ServiceStack.Redis" version="3.9.45"
    targetFramework="net45" />
  <package id="ServiceStack.Text" version="3.9.46"
    targetFramework="net45" />
</packages>

Als nächstes konvertieren Sie die WCF-Datenverträge definiert im TicketSystem.ServiceContract-Projekt, die ServiceStack verstanden werden kann.

ServiceStack von Datenverträgen WCF-Datenverträge umwandeln WCF Datenverträge verwendet, um die Mittel der Kommunikation zwischen dem Client und dem Server herzustellen. ServiceStack macht das gleiche. WCF erfordert, daß die entsprechenden Attribute gesetzt werden, auf jedem Datenobjekt und Datenmember serialisieren und über das Netzwerk senden möchten. Andernfalls ignoriert WCF einfach. Dies ist, wo ServiceStack und WCF unterscheiden. ServiceStack wird alle Plain Old CLR Objects (POCOs) verwiesen, die im Servicevertrag zu serialisieren und auf der Client-Seite sichtbar machen. Folgende sind WCF und ServiceStack Code Darstellungen der gleichen Ticket-Daten-Vertrag-Verweis in der TicketService-Schnittstelle.

Hier ist die WCF-<Ticket> Datenvertrag:

[DataContract]
public class Ticket {
  [DataMember]
  public int TicketId { get; set; }
  [DataMember]
  public int TableNumber { get; set; }
  [DataMember]
  public int ServerId { get; set; }
  [DataMember]
  public List<Order> Orders { get; set; }
  [DataMember]
  public DateTime Timestamp { get; set; }
}

Hier ist die ServiceStack <Ticket> Datenvertrag:

public class Ticket {
  public int TicketId { get; set; }
  public int TableNumber { get; set; }
  public int ServerId { get; set; }
  public List<Order> Orders { get; set; }
  public DateTime Timestamp { get; set; }
}

Der Hauptunterschied zwischen Service­Stack und WCF in Bezug auf die Service-Schnittstelle ist, dass ServiceStack bringt zusätzliche Einschränkungen auf die Service-Schnittstelle. ServiceStack besagt, dass jeder eindeutige Anforderung durch ein einzigartiges Request-Objekt identifiziert wird, denn es kein Konzept für einen "Webdienstvorgang" (d. h. Methodennamen) in der Welt der ServiceStack gibt. Dies bedeutet, dass Sie eine Anforderung DTO über mehrere Service-Implementierungen mit ServiceStack wiederverwenden können nicht. Alle ServiceStack Web-Service-Betrieb-Verträge würde etwas ähnlich wie die folgenden WCF-Service-Verträge entsprechen:

[ServiceContract]
public interface ITicketService {
  [OperationContract]
  List<Ticket> GetAllTicketsInQueue(GetAllTicketsInQueueRequest request);
  [OperationContract]
  void QueueTicket(QueueTicketRequest request);
  [OperationContract]
  Ticket PullTicket(PullTicketRequest request);
}

Der obige Code ist nichts anderes als das ursprüngliche RPC-Stil TicketService WCF-Service-Interface hier gezeigt, aber so transformiert, dass um die DTO-Konvention zu umarmen:

[ServiceContract]
public interface ITicketService {
  [OperationContract]
  List<Ticket> GetAllTicketsInQueue();
  [OperationContract]
  void QueueTicket(Ticket ticket);
  [OperationContract]
  Ticket PullTicket();
}

Hier ist die entsprechende TicketService ServiceStack-Service-Schnittstelle:

public class GetAllTicketsInQueueRequest {}
public class QueueTicketRequest {
  public Ticket Ticket { get; set; }
}
public class PullTicketRequest {}
public interface ITicketService {
  List<Ticket> Any(GetAllTicketsInQueueRequest request);
  void Any(QueueTicketRequest request);
  Ticket Any(PullTicketRequest request);
}

ServiceStack unterstützt die verschiedene Aktionen, wie jeder, Get und Post.Die Entscheidungen treffen Sie hier nur HTTP-Anforderungen auswirken.Angabe auf eine Webdienstanforderung bedeutet, dass der Betrieb von HTTP-GET und HTTP POST aufgerufen werden kann.Diese Anwendung vereinfacht RESTful Web-Service-Implementierung, die über den Rahmen dieses Artikels ist.Um Ihren ServiceStack-Webdienst in einen RESTful Web-Dienst zu deaktivieren, fügen Sie einfach URL [Route(...)]  Attribute, die Ihre Web Service Anfrage Erklärungen.

Erstellen eines ASP.NET Hosted ServiceStack-Webdienstes nun, dass Sie die Web-Service-Schnittstelle für Ihren ServiceStack Web Service definiert haben, es ist Zeit, es zu implementieren und es ins Leben gerufen.

Fügen Sie zunächst eine leere ASP.NET -Web-Applikation.Dies ist, wie ich entschied mich für meine ServiceStack-Webdienst für Bequemlichkeit zu hosten.Es ist beileibe nicht die einzige Methode für das Hosten eines Web-Service auf ServiceStack gebaut.Sie können auch einen Dienst innerhalb eines Windows-Dienstes oder in Form einer Konsolenanwendung, die unter einem Web-Server oder sogar unabhängig voneinander ausführen hosten.

Ich nannte diese Visual Studio -Projekt ServiceStackServer.Es ist das Äquivalent des Projektes WcfServer im Code-Beispiel für WCF-Dienst.

Verwenden die NuGet- Paket-Manager -Konsole ServiceStackServer ServiceStack Verweise hinzufügen, wie in Abbildung 6.

hinzufügen ServiceStack Bibliothek Verweise auf das ServiceStackServer-Projekt
Abbildung 6 hinzufügen ServiceStack Bibliothek Verweise auf das ServiceStackServer-Projekt

Jetzt haben Sie, was Sie brauchen, um die ITicketService-Schnittstelle implementieren.Erweitern der TicketService-Klasse muss die ServiceStack.Service­Interface.Service-Klasse, die die vom Framework, wie folgt:

public class TicketService : ServiceStack.ServiceInterface.Service,
  ITicketService {
  public List<Ticket> Any(GetAllTicketsInQueueRequest request) {
    // Implement ...
}
  public void Any(QueueTicketRequest request) {
    // Implement ...
}
  public Ticket Any(PullTicketRequest request) {
    // Implement ...
}
}

Alles andere ist identisch mit der WCF-Implementierung.

Als Nächstes fügen Sie eine globale Anwendungsklasse namens "Global.asax" für das ServiceStackServer-Projekt, siehe Abbildung 7.Dies ist, wo Sie Ihre ASP.NET Web-Anwendung initialisieren.

hinzufügen ServiceStackServer Global.asax
Abbildung 7 hinzufügen ServiceStackServer "Global.asax".

Sie müssen von den ServiceStack.WebHost.End erben­Punkte.AppHostBase-Klasse, wenn Sie Ihren Web-Dienst innerhalb einer ASP.NET -Anwendung hosten möchten.Ein Beispiel finden Sie in Abbildung 8.

Abbildung 8 einen ServiceStack Web-Service innen ASP.NET hostet

public class Global : System.Web.HttpApplication {
  public class TicketServiceHost : 
    ServiceStack.WebHost.Endpoints.AppHostBase {
    // Register your Web service with ServiceStack.
public TicketServiceHost()
      : base("Ticket Service", typeof(TicketService).Assembly) {}
    public override void Configure(Funq.Container container) {
      // Register any dependencies your services use here.
}
  }
  protected void Application_Start(object sender, EventArgs e) {
    // Initialize your Web service on startup.
new TicketServiceHost().Init();
  }
}

Wenn unter IIS 7.0 und höher ausgeführt, das Konfigurationselement in ausgestellt Abbildung 9 muss die Datei Web.config hinzugefügt werden.

Abbildung 9 die Datei Web.config für IIS 7 und höher

<configuration>
  <system.web>...</system.web>
  <!--Required for IIS 7 (and above) -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory"
        type="ServiceStack.WebHost.Endpoints.
ServiceStackHttpHandlerFactory, ServiceStack"
        verb="*" preCondition="integratedMode"
          resourceType="Unspecified"
        allowPathInfo="true" />
    </handlers>
  </system.webServer>
</configuration>

Wenn Sie die ServiceStack Web-Anwendung zu starten, Ihre Service-Verträge werden aufgelistet als Operationen Metadaten, wie in Abbildung 10.Jetzt ist Ihre Web-Service bereit, Clientanforderungen zu akzeptieren.Im nächsten Abschnitt werde ich einige Verbraucher-Beispiele für den ServiceStack-Webdienst bereitstellen.

TicketService-Metadaten
Abbildung 10-TicketService-Metadaten

Built-in ServiceStack-Clients

Die ServiceStack Development Group sehr ausgesprochene gegen ist Web Service-Client-Code generiert, so dass das Framework eine Reihe von integrierten Web Service-Clients aufgeführt unter dem Dienst bietet­Stack.ServiceClient.Web-Namespace.Alle integrierten Clients implementieren ServiceStack.Service.IServiceClient.Die restlichen Unterstützung implementieren ServiceStack.Service.IRestClient.

Verfügbaren Clients gehören:

  • JsonServiceClient
  • JsvServiceClient
  • XmlServiceClient
  • MsgPackServiceClient
  • ProtoBufServiceClient
  • Soap11ServiceClient
  • Soap12ServiceClient

Jeweils unterstützten eine unterschiedliche Serialisierung/Deserialisierung-Format.Ihre Verwendung ist austauschbar, da sie eine Reihe von gemeinsamen Schnittstellen implementieren.

Um Dinge einfach zu halten, erstellen eine Konsolenanwendung genannt ServiceStackClient, Ihr ServiceStack-Ticket verbrauchen­Service mit der JsvServiceClient.Wenn Sie einen anderen Client ausprobieren möchten, ersetzen Sie einfach den folgenden Code der JsvServiceClient mit einem der verfügbaren Clients, die zuvor aufgeführten:

static void Main(string[] args) {
  Console.Title = "ServiceStack Console Client";
  using (var client = new JsvServiceClient("http://localhost:30542")) {
    List<Ticket> queuedTickets =
      client.Send<List<Ticket>>(new GetAllTicketsInQueueRequest());
    if (queuedTickets != null) {
      foreach (Ticket ticket in queuedTickets) {
        PrintTicket(ticket);
      }
    }
  }
}

Die Konsole-Anwendung führt Folgendes aus:

  • Fragt den TicketService für alle Tickets in der Warteschlange.
  • Druckt die resultierende Tickets komme es aus der TicketService.

Die Konsole ausgeben ist genau das gleiche wie das Abwasseraufkommen der WCF-Client angezeigt, Abbildung 3.

Mehr zum Angebot

Dieser Artikel hat nur die Oberfläche, auf was ServiceStack zu WCF-Benutzer, die Suche nach Cross-Plattform-Lösungen zu bieten hat gekratzt.Ich habe nicht sogar ServiceStacks Unterstützung für streaming, Async Anforderungen und Nachrichtenwarteschlangen, z. B. diskutiert.

Wie Sie sehen können, sind ein paar zusätzliche Schritte erforderlich, um einen ServiceStack Web-Dienst im Gegensatz zu einem WCF-Webdienst erstellen.Jedoch denke ich, dass der Aufwand eher vernachlässigbar, die Dienstschicht eines Windows gebundene WCF Web Service in ein Multiplattform ServiceStack-Webdienst zu verwandeln ist.Wenn ich einen anderen Weg auf der Suche nach Plattform-Unabhängigkeit gegangen — z. B. die Verwendung eines Java -Web-Service — den Aufwand und die Lernkurve wäre viel größer im Vergleich.

Alles in allem, wenn der Webdienst bestimmt ist, nur auf einem Windows-Betriebssystem ausgeführt, ist WCF wohl die bessere Lösung.Gibt es weniger Aufwand beim Erstellen eines WCF-Webdiensts von Grund auf neu in der Windows-Umgebung, und Sie müssen nicht noch einem anderen dritten verteilbare zu erhalten und auf dem Zielsystem bereitstellen.

Ngan Le ist senior Software Engineer in enger Zusammenarbeit mit WCF, die vor kurzem begonnen, ServiceStack als plattformübergreifende Lösung für Web-Services zu erkunden.

Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Andrew Oakley (Microsoft)
Andrew Oakley ist Senior Program Manager für die Muster & Praxis-Team.Vor immer Programmmanager, verbrachte Andrew zwei Jahre als ein Technical Evangelist für Visual Studio und die .NET-Plattform.Sein aktuelle Projekt konzentriert sich auf die Daten Zugriff Anleitung um Gebäude polyglot permanente Systeme mit relationalen und NoSQL-Datenspeicher.