2013-08-13 13 views
5

Ho una piccola domanda "strana pratica". Il requisito su un'architettura del nostro progetto è di configurare l'API Web con (se possibile) tutto il valore MVC all'interno del progetto WCF. Ciò significa che WCF e servizi Web dell'API Web si starebbero uno contro l'altro all'interno di un progetto.Impostazione dell'API Web all'interno del progetto WCF

È fattibile? Ho dato una scorsa e ho scoperto che anche la fusione delle configurazioni web di due progetti è molto difficile.

Grazie per i vostri suggerimenti e commenti,

Jakub

risposta

-1

E 'possibile, ma con la perdita della bontà MVC (il che significa che non sarà in grado di utilizzare per esempio il costruito in documentazione in linea automatica per i tuoi servizi web).

Basta installare Web API tramite NuGet e quindi registrare il percorso in global.asax. Crea il tuo controller API e dovrebbe essere tutto a posto.

EDIT 2017/02/01:

Questo non è più vero. Dal momento che l'approccio di Microsoft è stato quello di unire MVC e controller API Web. Ora qualsiasi cosa è possibile.

+1

non strettamente vero. Puoi avere MVC, Web API e WCF tutti nella stessa applicazione. Sono pezzi di tecnologia indipendenti. Assicurati che il tuo routing non si sovrapponga, ma a parte questo funziona. Ho una soluzione in produzione con esattamente la stessa architettura. – reckface

+0

@reckface questo è vero ora, non era nel 2013.Si prega di consultare le date prima di commentarlo. È una soluzione obsoleta. –

+0

, non ho nemmeno notato la data fino alla tua risposta ... – reckface

2

ho seguito questi passi e ha funzionato bene:

  1. Assicurarsi che il servizio WCF funziona correttamente.
  2. Installare WebAPI al progetto attraverso Nuget Package Manager

    Installare-Pacchetto Microsoft.AspNet.WebApi

  3. Crea cartella Controller e scrivere la vostra classe e metodi di controllo.

  4. Creare file Global.asax
  5. percorsi registrare per i propri servizi in Application_Start metodo.

    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

cosa è nome_servizio qui? – jcmordan

+0

Il nome della tua classe WCF. –

0

In realtà non ci sono grandi limitazioni all'uso delle due tecnologie all'interno dello stesso progetto. Di default wcf ha una "pipe line" diversa da asp.net, ma fino a quando non può essere modificata. Utilizzando la configurazione di seguito in web.config è possibile configurare wcf per utilizzare la stessa pipeline di asp.net condividendo così l'intero ciclo di vita degli oggetti della richiesta. Ma non credete che questo approccio sia usuale per tutti i casi, altri fattori devono essere considerati per prendere quella decisione, ad esempio, come pensate di distribuire la vostra applicazione? Quando rilasci una versione di wcf, rilascerai anche web.api, in molti casi potresti non voler ottenere questo risultato.

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