2016-01-25 6 views
10

Sto lavorando su un progetto che include un componente WebAPI ASP.NET.Intermittente "Impossibile caricare il tipo 'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'" Errore

intermittenza, ottengo il seguente errore:

Could not load type 'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly 'System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

con l'errore di origine indicando il mio GlobalConfiguration.Configure() chiamata:

Line 35: { 
Line 36:  AreaRegistration.RegisterAllAreas(); 
Line 37:  GlobalConfiguration.Configure(WebApiConfig.Register); //<-- error here 
Line 38:  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
Line 39:  RouteConfig.RegisterRoutes(RouteTable.Routes); 

Nel mio registro, sto facendo quanto segue per restituire JSON per default :

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes 
       .FirstOrDefault(t => t.MediaType == "application/xml"); 

if (appXmlType != null) 
{ 
    config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 
} 

(non sicuro di la fonte, ma trovata da qualche parte su questo sito come modo per restituire JSON per impostazione predefinita, a meno che il chiamante chieda qualcos'altro)

Vorrei continuare a restituire JSON come il tipo di contenuto predefinito in futuro.

Il progetto include altri due siti Web (non WebAPI) (MVC5), che raggiungono il sito WebAPI.

Ecco la cosa interessante:

  • Questo NON accade quando l'applicazione viene distribuita (Azure)
  • Questo accade solo occasionalmente
  • In genere, ho eseguito uno dei siti MVC5 in il debugger e vedi questo numero
  • Se navigo direttamente al sito WebAPI dopo quanto sopra, ricevo la "Yellow Screen of Death" con l'errore come sopra
  • A volte, anche dopo un riavvio a freddo, questo errore non apparirà, altre volte lo farà

Quello che ho attualmente fare per aggirare il problema:

  • Se eseguo il sito WebAPI nel debugger, se l'errore è presente, essa stessa fissato
  • Dopo l'esecuzione nel debugger (al precedente), posso rilanciare un sito MVC5 nel debugger e la questione va via

Proprio a ripetere, thi s NON succede sempre quando l'applicazione viene distribuita in Azure.

Ho diversi sviluppatori che lavorano a questo progetto e ci imbattiamo tutti nello stesso errore a un certo punto.

sto referenziazione i seguenti pacchetti Nuget:

  • Microsoft.AspNet.WebApi (versione 5.2.3)
  • Microsoft.AspNet.WebApi.Client (versione 5.2.3)
  • Microsoft. AspNet.WebApi.Core (versione 5.2.3)
  • Microsoft.AspNet.WebApi.Owin (versione 5.2.2)
  • Microsoft.AspNet.WebApi.WebHost (versione 5.2.3)

Se guardo dentro il file *.csproj, ho un riferimento a quanto segue:

<Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

ho controllato la cartella bin del sito web, e tutti i gruppi al suo interno hanno la versione corretta come da lista di cui sopra (compresi System.Net.Http.Formatting. dll).

inoltre notare che, durante il debug e lo sviluppo, ciascuno dei tre siti web è gestita sotto Local IIS (vincoli di risorse esterne ci costringono a fare questo), in modo da avere:

  • http://localhost/site1
  • http://localhost/site2
  • http://localhost/api

sta diventando ingombrante per entrare in una sessione di debug, per ottenere questo errore, per poi interrompere il debug, avviare il sito API sotto il debugger e quindi tornare a ciò che stavo facendo all'inizio.

Non so dove altro andare a rintracciare cosa sta succedendo qui. Qualche idea?

Aggiornamento - 26 luglio 2016

ancora avere questo accada. Dopo aver postato la domanda, ho aggiornato WebAPI per l'esecuzione nel proprio pool di applicazioni, ma ciò non sembra aver fatto la differenza.

+0

Provare a impostare '" Copia su locale "' su true per il riferimento 'System.Net.Http.Formatting' –

+0

Grazie per il commento -' Copia su locale' è stato impostato su 'true' per un po 'di tempo - non sembra fare la differenza –

+0

Probabilmente la cartella 'bin' (quando distribuita) contiene un' System.Net.Http.Formatting.dll'; rimuoverlo e verrà utilizzato il runtime 'System.Net.Http.Formatting.dll'. – josejuan

risposta

2

Disinstallato Web API 2 Pacchetto NuGet Installato Web API 2 NuGet pacchetto di nuovo.

+0

Darò questo e vedere cosa trovo. Dubito che risolverà tutto ciò in quanto un nuovo sviluppatore che ha recentemente clonato il repository si imbatte anche in questo problema. –

1

Penso che stiate sbagliando. Prova ad impostare JSON come formattatore multimediale predefinito in questo modo:

// first clear all formatters 
config.Formatters.Clear(); 
// Since JSON is the first added, 
// it will be the "default" if no Accept header present 
config.Formatters.Add(new JsonMediaTypeFormatter()); 
// You can choose not to add these back if you never want to use them, 
// up to you.  
config.Formatters.Add(new XmlMediaTypeFormatter()); 
config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter()); 
+0

Mentre ho apportato questa modifica, non ha fatto alcuna differenza per il risultato. –

-1

quando costruisci cerca avvisi che parlano di conflitto. Facendo doppio clic sugli avvisi, si inseriscono le versioni compatibili nella sezione di web.config. Questo ovviamente può essere fatto anche manualmente.

0

avevo aggiunto quello che era forse una versione non corretta di System.Net.Http.Formatting alla mia Global Assembly Cache (GAC) e iniziato a ricevere

Could not load type 
'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly 
'System.Net.Http.Formatting 

errori nel mio Webservice. Dopo aver rimosso questa DLL di System.Net.Http.Formatting da GAC, il mio webservice ha iniziato a funzionare di nuovo.