jQuery: сбой Ajax-вызова веб-службы asp.net, ошибка возврата сервера 500 - PullRequest
3 голосов
/ 08 января 2010

Хорошо, поэтому я создал тестовый проект просто для проверки того, что jQuery AJAX работает со службой asp.net, и с этим нет проблем. Я использовал сервис HelloWorld по умолчанию, созданный в VS studio. Я звоню в сервис через jQuery так:

в Default.aspx:

<script language="javascript" type="text/javascript">
    $(document).ready(function() {

        //test web service
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "TestService.asmx/HelloWorld",
            data: "{}",
            dataType: "json",
            success: function(msg) { alert(msg);},
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                debugger;
            }
        });
    });
</script>

в TestService.asmx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebServiceTestWitJQuery
{
    /// <summary>
    /// Summary description for TestService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class TestService : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

Затем я продолжил и скопировал все точно так же, как в моем проекте, и это не работает. Я получаю 500 ошибок сервера.

Я подтвердил следующее:

  1. web.configs идентичные
  2. страниц идентичных
  3. идентичный класс обслуживания
  4. JQuery AJAX вызов идентичный
  5. Я могу перейти к http://localhost:3272/TestService.asmx?op=HelloWorld, и веб-сервис работает нормально.

Что еще?

Ответы [ 6 ]

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

Разобрался. Если вы не уверены, что происходит, используйте Fiddler. Это ясно показывает, что серверу не удалось создать экземпляр класса обслуживания, поскольку он находился в неправильном пространстве имен. Я отключил R # и не заметил, что я не изменил пространство имен службы. Проблема решена.

1 голос
/ 20 сентября 2011

У меня есть пара догадок, поскольку я немного знаю о jQuery, но ничего не знаю об asp.net.

При вызове jQuery вы указываете, что хотите получить ответ json. «Hello World», я думаю, будет возвращена в виде необработанной строки, а не в формате json. Удалите dataType: «json», «param» и «jQuery» должны наилучшим образом определить полученный тип данных.

Я думаю, что то, как вы написали свой код jQuery, совместимо только с веб-сервисами RESTful, а не с обычными веб-сервисами с WSDL. Хотя я ничего не знаю об asp.net, я не вижу ничего в соглашениях об именах, когда вы используете REST.

0 голосов
/ 23 февраля 2018

Я публикую это, потому что ни одно из лучших решений не сработало для меня (VS2015, .Net4.0, вызов ajax в WebForms, как в вопросе).Это сработало только после того, как я явно авторизовал HttpPost в файле конфигурации следующим образом:

<system.web>
    <webServices>
     <protocols> 
    <add name="HttpGet" /> -- just for direct testing : delete this line after 
    <add name="HttpPost" />
     </protocols>
     </webServices>
</system.web>
0 голосов
/ 13 марта 2015

Я получал эту ошибку, и она была вызвана тем, что мой WebService не имел доступа к состоянию сеанса. Это исправлено изменением

[WebMethod]
public MyData GetMyData() {...}

до

[WebMethod(EnableSession = true)]
public MyData GetMyData() {...}

См. Эту ссылку для получения дополнительной информации: Как использовать состояние сеанса в ASP.NET WebService

0 голосов
/ 13 апреля 2013

я решил это. Я знаю, что уже слишком поздно, чтобы ответить на этот вопрос, но, возможно, у кого-то есть такая же проблема.

я удалил строки ниже из ajax и отключил внутреннюю ошибку 500.

contentType: "application/json; charset=utf-8",
        data: "{}",
        dataType: "json",
0 голосов
/ 12 апреля 2013

Проблема в вашем скрипте URL, поэтому вам нужно написать полный URL. Здесь - ваше решение. НАПРИМЕР: URL:localhost:1111/TestService.asmx/HelloWorld

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...