я только что обновил тестовую копию своего сайта на asp.net 4.0 и заметил странную проблему, которая только возникает, когда я загружаю сайт на свой сервер.
сайт имеет asmx веб-сервис, который возвращает json, все же когда я выполняю сайт на своем сервере, он возвращает xml. это, как хорошо работающий в asp.net 3.5 больше года.
webMethod украшен корректными атрибутами...
[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<LocationRecentChange> RecentChanges()
и на моей локальной машине это возвращает json.
все же на сервере (Windows 2008 64bit) это возвращает xml.
использование консоли поджигателя, Вы будете видеть 200 хорошо ответ и набор 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);
}
});
}
Любое приветствие предложений, этому озадачили меня!
Вы уверены, что .NET 4 установлен на вашем сервере?
Строка "type" 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 по умолчанию на уровне машины. Таким образом, вам не потребуется никакого отображения ScriptHandlerFactory в web.config вашего проекта, 3.5 или 4.
ну, мне удалось отследить это, прочитав о том, что запросы веб-сервисов ajax обрабатываются здесь ...
http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/ajax/ tutorial-05-cs.aspx
в основном обработчик из asp.net 3.5 должен быть объявлен в разделе обработчиков web.config в system.webserver, чтобы он мог возвращать ответ JSON вместо ответа по умолчанию.
вот что вам нужно добавить в раздел обработчиков web.config (также добавьте в раздел httpHandlers , если вам нужно поддерживать 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"/>
у меня есть У меня есть подозрения, что его нужно будет заменить на версию того же обработчика .net 4.0, но пока он работает.