2016-07-18 11 views
0

Ich habe ein Problem im Zusammenhang mit WCF-Service und Web-API mit den folgenden Schritten.[Web API] Hinzufügen von Web App zu WCF Service-Lösung

  1. erstellen WCF Service-Anwendung, die Service1.svc ist
  2. Rechte dieses Projekt Klicken und hinzufügen -> Web-API -> Web-API-Controller Klasse

Kann ich Web-API in WCF Lösung hosten so was? Ich habe keinen Ort gefunden, an dem ich die Web-API konfigurieren oder registrieren könnte. Wenn ich dieses Projekt ausführe, wird die Web-API nicht korrekt ausgeführt.
Code für Web-api

public class Service1 : IService1 
 
    { 
 
     public Service1() 
 
     { 
 
      var config = new HttpSelfHostConfiguration("http://localhost:8080"); 
 

 
      config.Routes.MapHttpRoute(
 
       "API Default", "api/{controller}/{id}", 
 
       new { id = RouteParameter.Optional }); 
 

 
      using (HttpSelfHostServer server = new HttpSelfHostServer(config)) 
 
      { 
 
       server.OpenAsync().Wait(); 
 
       Console.WriteLine("Press Enter to quit."); 
 
       Console.ReadLine(); 
 
      } 
 
     }

+2

warum möchten Sie dies tun? Ich denke nicht, dass Sie Web API und WCF leicht in demselben Projekt kombinieren können. – Prashant

Antwort

1

Kein Hosting, können Sie nicht eine Web-API-Controller in einem WCF-Dienst-Projekt hinzufügen und erwarten, dass es funktioniert. WCF und WebAPI haben in Bezug auf ihre Abhängigkeit von der BCL kaum Überschneidungen.

Ich denke, Prashant, in seinem Kommentar, bringt es sehr beredt, wenn er argumentiert:

, warum Sie dies tun wollen?

können Sie Host sowohl ein WebAPI Projekt und ein WCF-Service-Projekt in der gleichen Lösung, aber auch wenn Sie dies tun können, warum sollen Sie wollen?

Wenn Sie die gleichen Endpunkte über SOAP und REST verfügbar machen möchten, können Sie dies nur mit WCF tun.

+0

Danke für Ihre Hilfe. Ich möchte einfach nicht zweimal für WCF und Web API veröffentlichen. Mit dem Dienst wcf konnte ich ihn direkt in IIS hosten, und wei api unterstützt HttpSelfHost. Ich habe versucht, obigen Code zur Service1-Klasse hinzuzufügen, und nachdem ich eine Anfrage an die WCF gestellt habe, wird meine Web-API Host sein, und ich könnte sie korrekt aufrufen. Aber, ich habe ein wenig Sorge für diesen Weg, denn Web-API würde nicht funktionieren, bis es eine Anfrage an den Dienst wcf gibt, und es scheint, dass jede Anfrage über dem Code ausgeführt wird. Können Sie uns teilen, wenn es eine Methode gibt, diesen Code auszuführen, wenn ich meinen wcf-Dienst anstelle von Konstruktor hosten? –

+0

@Edward Ich verstehe immer noch nicht, warum Sie beide hosten möchten. Warum denkst du, du brauchst beides? –

+0

Ich denke, es gibt gültige Fälle, in denen Sie dies tun möchten. Z.B. Sie haben eine vorhandene WCF-App und möchten einen Restful-Service hinzufügen, der Json akzeptiert. Der WCF JSON-Serializer akzeptiert keine ISO-Datumsangaben, daher möchten Sie die Newtonsoft-Version verwenden. Das Ersetzen des Standard-JSON-Serialisierers ist eine Menge Code in WCF, während das Hinzufügen des Webapi-Controllers einfach ist: http://stackoverflow.com/questions/18204365/setting-up-web-api-within-wcf-project – yowl00