2010-05-01 16 views
8

Właśnie zaktualizowałem kopię testową mojej witryny do wersji asp.net 4.0 i zauważyłem dziwny problem, który pojawia się tylko wtedy, gdy przesyłam stronę na mój serwer.Usługa webowa zwracająca xml zamiast json w .net 4.0

Witryna ma serwis WWW ASMX, który zwraca json, ale po uruchomieniu witryny na moim serwerze zwraca xml. to działa dobrze w asp.net 3.5 przez ponad rok.

WebMethod ozdobiony jest poprawnych atrybutów ...

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

i na moim komputerze lokalnym zwraca JSON.

jeszcze na serwerze (Windows 2008 64bit) zwraca xml.

za pomocą konsoli firebug zobaczysz 200 odpowiedzi OK i kilka XML, a na moim komputerze lokalnym zwrócone dane to JSON, którego oczekuję.

Oto JavaScript, który wywołuje usługę ..

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); 
    } 
}); 

}

Wszelkie sugestie mile widziane, to ma mnie stumped!

Odpowiedz

7

Czy na pewno .NET 4 jest zainstalowany na serwerze?

na ScriptHandlerFactory za "typu" string w .NET 4 jest:

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

ASP.NET 4 zawiera teraz, że w swojej domyślnej web.config na poziomie maszyny. Nie powinieneś więc potrzebować żadnego mapowania do ScriptHandlerFactory w web.config projektu, 3.5 lub 4.

+0

Okazuje się, że serwer ma coś ciekawego z IIS. Nie mogę odtworzyć problemu lokalnie, ale wstawienie elementu do pliku web.config powoduje jego usunięcie. – Baldy

+3

Mam dokładnie ten sam problem.Czy możesz edytować odpowiedź, podając dokładny kod, który muszę dodać do mojego pliku web.config (w tym do której sekcji należy dodać)? Dzięki. – njr101

2

dobrze udało mi się go wyśledzić przez czytania o ajax usług internetowych żądania są obsługiwane tutaj ...

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

zasadzie obsługi z ASP.NET 3.5 potrzeby należy zgłaszać w internecie. sekcja obsługi plików konfiguracyjnych w systemie system.webserver, dzięki czemu może zwrócić odpowiedź JSON zamiast domyślnej.

tutaj jest to, co trzeba dodać do pliku web.config handlers section (również dodać do httpHandlers sekcji jeśli trzeba wspierać 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"/> 

Mam podejrzenia, że ​​będzie to wymagać wymiany z Wersja .net 4.0 tego samego programu obsługi, ale na razie działa.

+1

Mam dokładnie ten sam problem. Czy możesz edytować odpowiedź, aby uwzględnić, do której sekcji należy dodać? Oraz wszelkie dodatkowe elementy, takie jak , jeśli jest to wymagane. Dzięki. – njr101

+0

zaktualizowałem to dla ciebie i dodałem linki do odpowiedniej dokumentacji sekcji – Baldy

+0

Ale nie powiedziałeś gdzie dodać sekcję ... Gdzie to idzie? Gdziekolwiek to ujęłam, dostaję błąd. – NickG