2010-05-01 148 views
8

我剛剛將我的網站的測試副本升級到asp.net 4.0,並注意到只有當我將該網站上載到我的服務器時纔會出現一個奇怪的問題。asmx web服務在.net 4.0中返回xml而不是json

該網站有一個asmx web服務,返回json,但是當我在我的服務器上運行該網站時,它返回xml。它一直在asp.net 3.5中工作良好一年多。

將WebMethod裝飾有正確的屬性...

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

和我的本地機器返回JSON。

尚未在服務器(Windows 2008 64位)上返回xml。

使用Firebug控制檯,您將看到200 OK響應和一堆XML,並且在本地計算機上返回的數據是我期望的JSON。

下面是調用服務的JavaScript ..

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

}

任何建議表示歡迎,這讓我難住了!

回答

7

您確定.NET 4安裝在您的服務器上嗎?

的ScriptHandlerFactory的 「類型」 的.NET 4串是:

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

ASP.NET 4現在包括在機器級其默認的web.config。所以,你不應該需要在你的項目的web.config,3.5或4中映射到ScriptHandlerFactory。

+0

原來服務器有一些與IIS一起發愁。我無法在本地重新創建問題,但將該項插入到web.config中可以解決問題。 – Baldy 2010-05-05 19:38:42

+3

我有完全相同的問題。你可以編輯答案,包括我需要添加到我的web.config中的確切代碼(包括需要添加到哪個部分)?謝謝。 – njr101 2012-06-19 07:25:39

2

嗯,我設法追查閱讀了關於Ajax的Web服務請求都在這裏處理...

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

基本上是從asp.net 3.5需要一個處理程序,在您的網絡中聲明。在system.webserver下配置處理程序部分,以便它可以返回JSON響應而不是默認值。

這裏是你需要添加到web.config handlers section什麼(如果你需要支持IIS6也增加httpHandlers節)...

<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"/> 

我有我的懷疑,這將需要更換同一處理程序的.net 4.0版本,但現在,它的工作原理。

+1

我有完全相同的問題。你能編輯答案以包含它需要添加到哪個部分嗎?如果需要,還可以添加其他元素,例如。謝謝。 – njr101 2012-06-19 07:27:04

+0

已經爲您更新並且已添加指向相關章節文檔的鏈接 – Baldy 2012-06-19 10:51:34

+0

但是您還沒有說過要添加部分的內容......該去哪裏?我曾經說過,我得到一個錯誤。 – NickG 2013-04-11 14:51:20