Как позвонить в WebMethod? - PullRequest
6 голосов
/ 24 марта 2012

Я пытаюсь вызвать WebMethod из JavaScript.На данный момент у меня есть:

EMSWebService.asmx:

namespace EMSApplication.Web.WebServices
{
    /// <summary>
    /// Holds the Webservice methods of EMSApplication
    </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]     
    [System.Web.Script.Services.ScriptService]
    public class EMSWebService : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

На странице aspx я добавил следующее:

<asp:ScriptManager ID="ScriptManager" runat="server">
    <Services>
        <asp:ServiceReference Path="~/WebServices/EMSWebService.asmx" />
    </Services>
</asp:ScriptManager>
<input onclick="callWebMethod();" id="btn" type="button" value="Click Me" />

И JavaScript такой:

<script type="text/javascript">
    function callWebMethod() {
        EMSApplication.Web.WebServices.EMSWebService.HelloWorld(OnComplete, OnError);            
    }

    function OnComplete(result) {
        alert(result);
    }

    function OnError(result) {
        alert(result.get_message());
    }

</script>

Но метод не выполняется.Я получаю следующую ошибку JavaScript:

Приложение EMS не определено.

Что-то мне не хватает?Нужно ли выполнять какую-либо другую настройку?

Структура проекта изображена ниже:

enter image description here

JavaScript и компоненты находятся в Login.aspx.

Имеет ли значение URL [WebService(Namespace = "http://tempuri.org/")]


Редактировать:

Я также пробовал это с помощью jQuery и изменил страницу aspx следующим образом:

$(document).ready(function () {
        $("#btn").click(function () {                
            $.ajax({
                type: "POST",
                url: "../WebServices/EMSWebService.asmx/HelloWorld",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    alert(response.d);                        
                },
                failure: function (msg) {                        
                    alert(msg.d);
                }
            });
            return true;
        });
    });

Я написал System.Diagnostics.Debug.WriteLine("Hello World"); внутри WebMethod, он выполняет это, то есть печатает «Hello World» в окне вывода Visual Studio, но я не получаю никаких предупреждений.

Ответы [ 2 ]

5 голосов
/ 16 июля 2014

Я хотел бы ответить на вопрос напрямую.

У меня есть WebMethod, сидящий в SomePage.aspx файле:

[WebMethod]
public static String DoSomething(String shiftName)
{
    return shiftName+" hi there";
}

Вопрос: Как сделатья называю этот веб-метод? Поскольку это HTTP, ответ на HTTP POST к серверу:

POST http://localhost:53638/SomePage.aspx/DoSomething HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: qps-ploc,en-US;q=0.5
Accept-Encoding: gzip, deflate
Host: localhost:53638
Connection: Keep-Alive
Content-Length: 23
Content-Type: application/json;charset=utf-8

{'shiftName':'contoso'}

критически важноОбратите внимание:

  • HTTP-метод: POST (GET не будет работать)
  • вы указываете имя вашего методана странице aspx как SomePage.aspx / [MethodName] .В этом случае:

    SomePage.aspx / DoSomething

  • вы передаете параметры метода как JSON.Этот метод имеет один строковый параметр: shiftName.Это означает, что я сконструировал JSON:

    {'shiftName':'contoso'}
    
  • с типом содержимого JSON запроса, необходимо указать заголовок запроса Content-Type:

    ContentType: application/json;charset=utf-8
    

Учитывая, что в моем примере WebMethod просто берет предоставленный текст, добавляет hi there и возвращает эту строку, ответ от веб-сервера:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 24
Connection: Close

{"d":"contoso hi there"}

Где тело ответа HTTPтакже строка JSON с одним свойством d.Я не знаю, откуда они взяли d, но это так.

Вот как вы называете WebMethod, используя http (например, язык ассемблера, COM, C #, Java, Delphi).

Самый распространенный вопрос - как вы звоните с клиента , используя jQuery.

$.ajax({
       type: "POST",
       url: 'Catalogo.aspx/checaItem',
       data: "{ id : 'teste' }",
       contentType: 'application/json; charset=utf-8',
       success: function (data) {
           alert(data);
       }
});

Примечание : любой кодвыпущен в общественное достояние.Указание авторства не требуется.

1 голос
/ 24 марта 2012

Вы должны убедиться, что у вас есть скрипт-обработчик, определенный в вашем файле web.config ... подробнее здесь http://msdn.microsoft.com/en-us/library/bb398998.aspx

...