Чтобы веб-служба ASP.NET SOAP (asmx) работала с jQuery, сначала необходимо добавить ScriptServiceAttribute
(находится в System.Web.Script.Services
) к самой службе:
[ScriptService] // <--- here
public class MyWebService : WebService
{
[WebMethod]
public int Sum(int x, int y)
{
return x + y;
}
}
Если проект не был создан как проект ASP.NET AJAX, вам может потребоваться изменить web.config
следующим образом:
<configuration>
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpHandlers>
</system.web>
</configuration>
(Примечание - обновите ссылку на сборку System.Web.Extensions
соответствующей версией - это для ASP.NET AJAX 1.0, которая не является текущей. У меня нет информации для 2.0, в противном случае я опубликую ее)
Код jQuery можно записать так:
$.ajax({
type: "POST",
url: "/MyWebService.asmx/Sum",
data: "{x: 2, y: 5}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#Result").html(msg);
}
});
Обратите внимание, что это сломает любые клиенты, которые полагаются на службу XML - я полагаю, что единственным ответом на веб-службу будут веб-сайты, использующие jQuery или, по крайней мере, JavaScript. Если вам нужно поддерживать оба сценария, вам нужно создать две веб-службы.