2010-05-01 38 views
8

tôi vừa nâng cấp bản sao thử nghiệm trang web của mình lên asp.net 4.0 và đã nhận thấy sự cố lạ chỉ phát sinh khi tôi tải trang web lên máy chủ của mình.dịch vụ web asmx trả về xml thay vì json trong .net 4.0

trang web có dịch vụ web asmx trả về json, nhưng khi tôi chạy trang web trên máy chủ của tôi, nó trả về xml. nó đã được làm việc tốt trong asp.net 3.5 trong hơn một năm.

WebMethod được trang trí với các thuộc tính đúng ...

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

và trên máy tính địa phương của tôi nó sẽ trả về json.

chưa có trên máy chủ (Windows 2008 64bit), nó trả về xml.

sử dụng bảng điều khiển firebug, bạn sẽ thấy phản hồi 200 OK và một loạt XML và trên máy cục bộ của tôi dữ liệu được trả lại là JSON tôi mong đợi.

Đây là javascript mà các cuộc gọi dịch vụ ..

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

}

Bất kỳ lời đề nghị chào đón, điều này đã bị tôi bối rối!

Trả lời

7

Bạn có chắc chắn .NET 4 được cài đặt trên máy chủ của bạn không?

của ScriptHandlerFactory "loại" chuỗi trong .NET 4 là:

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

ASP.NET 4 hiện nay bao gồm rằng trong web.config mặc định của nó ở mức độ máy. Vì vậy, bạn không cần bất kỳ ánh xạ nào đối với ScriptHandlerFactory trong web.config của dự án của bạn, 3.5 hoặc 4.

+0

Bật máy chủ có điều gì đó thú vị xảy ra với IIS. Tôi không thể tạo lại vấn đề cục bộ, nhưng chèn mục vào web.config sẽ sửa lỗi đó. – Baldy

+3

Tôi đang gặp chính xác cùng một vấn đề.Bạn có thể chỉnh sửa câu trả lời để bao gồm mã chính xác tôi cần thêm vào web.config của mình (bao gồm phần nào cần được thêm vào) không? Cảm ơn. – njr101

2

tôi cũng quản lý để theo dõi nó xuống bằng cách đọc lên về các dịch vụ web ajax yêu cầu được xử lý ở đây ...

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

cơ bản là một bộ xử lý từ asp.net 3.5 cần phải được khai báo trong web của bạn. phần trình xử lý cấu hình trong system.webserver để nó có thể trả về một phản hồi JSON thay vì mặc định.

đây là những gì bạn cần để thêm vào web.config handlers section (còn thêm vào httpHandlers phần nếu bạn cần hỗ trợ 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"/> 

tôi có nghi ngờ của tôi rằng điều này sẽ cần phải thay thế với phiên bản 4.0 của cùng một trình xử lý, nhưng hiện tại, nó hoạt động.

+1

Tôi gặp vấn đề tương tự. Bạn có thể chỉnh sửa câu trả lời để bao gồm phần bao gồm phần cần thêm vào không? Và mọi yếu tố bổ sung như nếu cần. Cảm ơn. – njr101

+0

đã cập nhật nó cho bạn và thêm liên kết đến tài liệu phần có liên quan – Baldy

+0

Nhưng bạn chưa cho biết nơi để thêm phần ... Đi đâu? Ở đâu tôi đã đặt nó, tôi nhận được một lỗi. – NickG

Các vấn đề liên quan