Ошибка 500 сервера от Ajax вызова веб-метода SOAP в. Net - PullRequest
0 голосов
/ 29 января 2020

У меня есть два разных асин c звонка, которые я делаю с ajax. Оба выполняются одинаково, но у одного есть параметры для веб-метода. Ссылка верна, когда я перехожу по ней, я правильно получаю возврат в браузере, но я просто продолжаю получать ошибку 500 сервера. Любые идеи? Один работает без параметров, вот код JS / jQuery, так как я немного уверен, что он не на стороне C#:

function CatChanged() {
    var strA = $('#ddlCategory').val();
    $.ajax({
        url: encodeURI('https://localhost:44380/WebService1.asmx/GetProducts?category=' + strA),
        data: '<soap: Envelope xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd="http://www.w3.org/2001/XMLSchema" xmlns: soap="http://schemas.xmlsoap.org/soap/envelope/%22%3E<soap: Body><xmlns="http://tempuri.org/" /></soap: Body></soap: Envelope >',
        type: 'POST',
        contentType: "text/xml",
        dataType: "text/xml",
        success: function (response) {
           alert(response.responseText);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("ERROR!!");
            alert(xhr.status);
            alert(thrownError);
        }
    });
}

Вот код веб-метода из C# код позади:

[WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string GetCategories()
        {
            Catalog cat = new Catalog();
            JavaScriptSerializer jss = new JavaScriptSerializer();
            return jss.Serialize(cat.categories);
        }

        [WebMethod]
        public string GetProducts(string category)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            Catalog cat = new Catalog();
            List<string> retList = new List<string>();
            switch (category)
            {
                case "Electronics":
                    foreach (Product product in cat.electronicProducts)
                    {
                        retList.Add(product.itemName);
                    }
                    return jss.Serialize(retList);
                case "Apparel":
                    foreach (Product product in cat.apparelProducts)
                    {
                        retList.Add(product.itemName);
                    }
                    return jss.Serialize(retList);
                case "Food and Drink":
                    foreach (Product product in cat.electronicProducts)
                    {
                        retList.Add(product.itemName);
                    }
                    return jss.Serialize(retList);
                default:
                    foreach (Product product in cat.electronicProducts)
                    {
                        retList.Add(product.itemName);
                    }
                    return jss.Serialize(retList);
            }
        }

... Вот скриншот возврата, который я получаю в браузере, когда перехожу по прямой ссылке из консоли разработчика в Chrome: enter image description here

Возврат все хорошо из веб-метода при вызове из URL. Это заставляет меня думать, что это должно быть что-то в вызове ajax, и я не уверен, что мне нужно делать по-другому, чтобы использовать его при добавлении параметра в веб-метод. Как я уже сказал, первый веб-метод работает в моем JavaScript коде, и я смог отлично проанализировать все из возврата.

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

1 Ответ

1 голос
/ 29 января 2020

Хорошо, если я вас правильно понимаю. Когда вы посещаете URL с помощью браузера, результаты работают просто отлично. Но когда вы делаете ajax вызов, у вас возникают проблемы.

Единственное, что я заметил из вашего кода, это то, что вы выполняете запрос POST с вашим вызовом ajax, но оба метода GET , Попробуйте изменить тип вызова ajax на GET.

Например,

function CatChanged() {
    var strA = $('#ddlCategory').val();
    $.ajax({
        url: encodeURI('https://localhost:44380/WebService1.asmx/GetProducts?category=' + strA),
        data: '<soap: Envelope xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd="http://www.w3.org/2001/XMLSchema" xmlns: soap="http://schemas.xmlsoap.org/soap/envelope/%22%3E<soap: Body><xmlns="http://tempuri.org/" /></soap: Body></soap: Envelope >',
        type: 'GET', // <-- Changed from POST to GET
        contentType: "text/xml",
        dataType: "text/xml",
        success: function (response) {
           alert(response.responseText);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("ERROR!!");
            alert(xhr.status);
            alert(thrownError);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...