Вызовите веб-сервис .asmx, используя $ .get jquery - PullRequest
0 голосов
/ 23 января 2010

Мне нужно вызвать простой метод из файла WfService.asmx, используя $ .get ().

Хорошо работает методом POST. Вот метод:

 [WebMethod]
 public int Sum()
 {
  return 10 + 10;
 }

Теперь используйте код Jquery:

$.get('WfService.asmx/Soma',function(data){
alert(data.d);},"json");

И я получаю сообщение об ошибке. Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 23 января 2010

Для связи с веб-службой SOAP необходимо отправить ему правильно отформатированный SOAP XML, соответствующий WSDL, определенному службой. Если вы явно не настроите свой веб-сервис ASP.NET на возврат данных JSON, вы не сможете сделать запрос $ .get () без предварительного создания сообщения SOAP.

1 голос
/ 23 января 2010

Чтобы веб-служба 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. Если вам нужно поддерживать оба сценария, вам нужно создать две веб-службы.

0 голосов
/ 12 августа 2013

пример, опубликованный @Aaronaught, работает, но с одной заметкой => вам нужно добавить атрибут к методу вашего веб-сервиса:

[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)]

пример:

 [WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)]
public int Add(int num1,int num2) {


    return num1 + num2;
}

А при вызове JQUERY ajax вам нужно изменить тип с POST на GET. Я работаю с .NET 4, и мне также не нужна эта конфигурация в файле web.config ..

Приветствия

...