JQuery, использующий веб-сервер ASP.Net Web Service - формат запроса не распознается для URL, неожиданно заканчивающегося на - PullRequest
0 голосов
/ 28 ноября 2010

Я много гуглил, но, похоже, не могу найти ответ.

Когда я звоню в свой веб-сервис из Jquery, я получаю сообщение об ошибке

Request format is unrecognized for URL unexpectedly ending in '/AirportSearchGeneric'. 

Факторы

  • В настоящее время я вызываю веб-службу, которая находится на том же компьютере, но на другом веб-сервере (вызывающее приложение - порт 64004, а принимающее приложение - 1400) - возможна ли перекрестная проблема «домен»?Оба являются локальными хостами.

  • Оба используют тестовый веб-сервер, который является частью visual studio.

  • Я попытался добавить 2 протоколав web.config (add name = "HttpGet" add name = "HttpPost")

  • Ошибка в средстве просмотра событий на сервере.

  • Я получаю следующее в Firebug ...

    ОПЦИИ AirportSearchGeneric http://localhost:1400/services/airportservice.asmx/AirportSearchGeneric

    500 Внутренняя ошибка сервера

    localhost: 1400

... ранее не видел OPTIONS, но к запросу обращаются с помощью запроса POST.

Код JQuery ...

$.ajax({
                    type: "POST",
                    url: "http://localhost:1400/services/airportservice.asmx/AirportSearchGeneric",
                    data: "{'criteria':'EGBB', 'maxResults':'10'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        alert(msg.d);
                    }
                });

Код веб-службы ...

[WebService(Namespace = "http://localhost/WebServices")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class AirportService : WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
        public string AirportSearchGeneric(string criteria, int maxResults)
        {
            IAirportService svc = new Airports.AirportService.AirportService();
            List<AirportSearchResult> res = svc.AirportSearchGeneric(criteria, maxResults);

            DataContractJsonSerializer serializer = new DataContractJsonSerializer(res.GetType());
            MemoryStream ms = new MemoryStream();
            serializer.WriteObject(ms, res);
            string jsonString = Encoding.Default.GetString(ms.ToArray());
            ms.Close();
            return jsonString;
        }
    }

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

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

Cheers.

Для справки заголовки firebug следующиеs:

Host    localhost:1400
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729; .NET4.0E)
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Origin  http://localhost:64004
Access-Control-Request-Me...    POST

(Ответ не получен в firebug, кроме ошибки 500, ответ html вообще отсутствует).

1 Ответ

1 голос
/ 28 ноября 2010

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

Вы либо вызываете другой порт, обманув браузер с помощью JSONP (если можете ограничиться только использованием запросов GET), либо измените один из портов на тот же, что и другой.

Кросс-доменные вызовы Ajax

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