2013-08-13 4 views
5

Mam trochę "dziwnej praktyki". Wymaganiem dotyczącym architektury naszego projektu jest skonfigurowanie Web API z (jeśli to możliwe) dobrem MVC w ramach projektu WCF. Oznacza to, że usługi internetowe WCF i Web API byłyby ustawiane wzdłuż siebie w ramach jednego projektu.Konfigurowanie interfejsu API WWW w ramach projektu WCF

Czy to jest nawet wykonalne? Dałem sobie z tym chwilę radę i okazało się, że nawet łączenie konfiguracji sieci dwóch projektów jest bardzo trudne.

Dziękuję za sugestie i komentarze,

Jakub

Odpowiedz

-1

Jest to możliwe, ale z utratą dobroci MVC (to oznacza, że ​​nie będzie w stanie wykorzystać na przykład wbudowanego automatycznego dokumentacji elektronicznej twoje usługi sieciowe).

Wystarczy zainstalować Web API przez NuGet, a następnie zarejestrować trasę w global.asax. Stwórz swój kontroler api i wszystko będzie dobrze.

EDIT 01.02.2017:

To już nie jest prawdą. Ponieważ podejście Microsoftu polegało na połączeniu MVC i kontrolera Web API. Teraz wszystko, co jest możliwe.

+1

nie ściśle. Możesz mieć MVC, Web API i WCF wszystko w tej samej aplikacji. Są niezależnymi elementami technologii. Tylko upewnij się, że twoja rutyna się nie nakłada, ale poza tym to po prostu działa. Mam rozwiązanie w produkcji o dokładnie takiej samej architekturze. – reckface

+0

@reckface to prawda, nie było w 2013 roku.Proszę zobaczyć daty przed ich skomentowaniem. To przestarzałe rozwiązanie. –

+0

, Nie zauważyłem nawet daty do czasu odpowiedzi ... – reckface

2

Śledziłem kroki i to działało w porządku:

  1. Upewnij się, że usługa WCF działa poprawnie.
  2. Install WebAPI do projektu przez Nuget Package Manager

    Install-Package Microsoft.AspNet.WebApi

  3. Utwórz folder Controller i wyraź swoją klasę i metod kontrolera.

  4. Tworzenie pliku Global.asax
  5. trasy zarejestrować swoje usługi w Application_Start metody.

    protected void Application_Start(object sender, EventArgs e) 
    { 
        RegisterRoutes(RouteTable.Routes); 
    } 
    
    private void RegisterRoutes(RouteCollection routes) 
    { 
        routes.MapHttpRoute(
    
         "webapi_route", 
    
          "/{controller}/{action}/{id}", 
    
         new { controller = "controller_name", action = "method_name", id = RouteParameter.Optional } 
    
        ); 
    
        RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(service_name))); 
    } 
    
+0

co to jest nazwa_usługi tutaj? – jcmordan

+0

Twoja nazwa klasy WCF. –

0

W rzeczywistości nie ma większych ograniczeń w korzystaniu z tych dwóch technologii w ramach tego samego projektu. Domyślnie wcf ma inną "linię rur" niż asp.net, ale do tego czasu można to zmienić. Korzystając z poniższej konfiguracji w pliku web.config, można skonfigurować wcf, aby korzystać z tej samej linii rurowej asp.net, dzieląc w ten sposób cały cykl życia obiektów żądania. Ale nie wierz, że to podejście jest typowe dla wszystkich przypadków, inne czynniki muszą być brane pod uwagę przy podejmowaniu tej decyzji, na przykład, w jaki sposób zamierzasz rozpowszechniać swój wniosek? Kiedy wypuszczasz wersję wcf, zwolnisz również web.api, w wielu przypadkach możesz nie chcieć tego rezultatu.

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />