2010-05-01 10 views
8

ho appena aggiornato una copia di prova del mio sito su asp.net 4.0 e ho notato uno strano problema che si verifica solo quando carico il sito sul mio server.servizio web asmx restituendo xml invece di json in .net 4.0

il sito ha un servizio Web asmx che restituisce json, ma quando eseguo il sito sul mio server restituisce xml. ha funzionato bene in asp.net 3.5 per oltre un anno.

il WebMethod è decorato con gli attributi corretti ...

[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public List<LocationRecentChange> RecentChanges() 

e sulla mia macchina locale restituisce JSON.

ma sul server (Windows 2008 64 bit) restituisce xml.

utilizzando la console di firebug vedrete una risposta di 200 OK e un mucchio di XML, e sul mio computer locale i dati restituiti sono i JSON che mi aspetto.

Ecco il javascript che chiama il servizio ..

function loadRecentData() { 
$.ajax({ 
    type: "POST", 
    url: "service/spots.asmx/RecentChanges", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: loadRecentUpdates, 
    failure: function(msg) { 
     //alert(msg); 
    } 
}); 

}

Eventuali suggerimenti di benvenuto, questo ha messo in difficoltà me!

risposta

7

Sei sicuro che .NET 4 sia installato sul tuo server?

del ScriptHandlerFactory stringa "tipo" in .NET 4 è:

System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

ASP.NET 4 include ora che nella sua web.config predefinita a livello di macchina. Pertanto, non è necessario alcun mapping a ScriptHandlerFactory nel web.config del progetto, 3.5 o 4.

+0

Si scopre che il server ha qualcosa di funky in corso con IIS. Non riesco a ricreare il problema localmente, ma l'inserimento dell'elemento nel web.config lo risolve. – Baldy

+3

Sto avendo esattamente lo stesso problema.Puoi modificare la risposta per includere il codice esatto che devo aggiungere al mio web.config (compresa la sezione in cui deve essere aggiunto)? Grazie. – njr101

2

bene sono riuscito a rintracciarlo leggendo fino sui servizi Web Ajax richieste vengono gestite qui ...

http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/ajax/tutorial-05-cs.aspx

fondamentalmente un gestore da ASP.NET 3.5 deve essere dichiarato nel vostro web. sezione dei gestori di configurazione in system.webserver in modo che possa restituire una risposta JSON anziché quella predefinita.

qui è ciò che è necessario aggiungere al web.config handlers section (aggiungere anche httpHandlers sezione se è necessario supportare IIS6) ...

<handlers> 
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

Ho i miei sospetti che questo avrà bisogno di sostituire con una versione .net 4.0 dello stesso gestore, ma per ora funziona.

+1

Ho esattamente lo stesso problema. Puoi modificare la risposta per includere l'inclusione in quale sezione deve essere aggiunta? E eventuali ulteriori elementi come ad esempio se necessario. Grazie. – njr101

+0

l'ha aggiornato per te e ha aggiunto collegamenti alla documentazione della sezione pertinente – Baldy

+0

Ma non hai ancora detto dove aggiungere la sezione ... Dove va? Dove mai lo metto, ottengo un errore. – NickG

Problemi correlati