Работать с Visual Studio 2005 и .NET 2.0 может быть немного сложно, тем более что большая часть информации в Интернете ссылается на .NET 3.5, которая по умолчанию включает компоненты AJAX.Как упоминалось Aaonaught , вам сначала нужно установить ASP.NET AJAX Extensions для .NET 2.0 .
После установки расширений AJAX вы захотите добавить новый веб-сайт «AJAX Enabled»: выберите «Файл»> «Создать»> «Веб-сайт».Выберите «Веб-сайт с поддержкой ASP.NET AJAX».Это будет файл конфигурации, отличный от обычного сайта ASP.NET в .NET 2.0, поэтому важно выбрать этот тип сайта.
Далее, если он еще не указан в вашей веб-конфигурации, вынужно щелкнуть правой кнопкой мыши на вашем проекте и перейти к «Добавить ссылку».Добавьте ссылку на System.Web.Extensions
версию 1.0.61025.0.Вот где живут новые библиотеки сценариев ( ОБНОВЛЕНИЕ: я могу подтвердить, что если вы настроите проект в VS 2005 как «AJAX Enabled Web Site», он автоматически включит ссылку на эту сборку в Web.Configfile ).
Последние два шага позволят вам добавить ссылку на System.Web.Script.Services.ScriptService
в ваш код.Теперь вы можете добавить веб-службу .asmx в свой проект, и все, что вам нужно сделать, это добавить следующий атрибут перед вашим классом обслуживания: [System.Web.Script.Services.ScriptService]
.Ваш код должен выглядеть примерно так:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
/// <summary>
/// Summary description for StockQuote
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class StockQuote : System.Web.Services.WebService {
public StockQuote () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod]
public decimal GetStockQuote(string ticker)
{
//perform database lookup here
return 8;
}
[WebMethod]
public string HelloWorld() {
return "Hello World";
}
}
Часть вашей проблемы с примером кода состоит в том, что вы не вызывали тот же веб-сервис, который вы определили в своем примере.Вы позвонили HelloWorld.asmx
из jQuery, но вы должны были позвонить StockQuote.asmx/HelloWorld
.Теперь, когда вы вызываете свой метод jQuery, используя application/json
в качестве типа контента, веб-служба будет подчиняться и отвечать JSON вместо XML.
JSON POST
POST http://bmccorm-xp/WebServicesAjax/StockQuote.asmx/HelloWorld HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer: http://bmccorm-xp/WebServicesAjax/TestJSON.html
Accept: application/json, text/javascript, */*
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: bmccorm-xp
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
JSON Ответ :
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Tue, 27 Apr 2010 19:11:40 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: application/json; charset=utf-8
Content-Length: 13
"Hello World"
jQuery POST с запросом XML:
POST http://bmccorm-xp/WebServicesAjax/StockQuote.asmx/HelloWorld HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer: http://bmccorm-xp/WebServicesAjax/TestJSON.html
Accept: application/json, text/javascript, */*
Content-Type: text/xml; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: bmccorm-xp
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
XML Ответ :
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Tue, 27 Apr 2010 18:54:55 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 96
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>