JQuery使用ASP.Net Web服务webserver - 请求格式无法识别,因为URL意外地以

时间:2010-11-27 23:19:32

标签: asp.net ajax json jquery

在此上做了很多谷歌搜索,但似乎无法找到答案。

当我从Jquery调用我的Web服务时,我收到错误

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

因素

  • 我目前正在调用同一台机器上的网络服务,但是在不同的网络服务器上(调用应用程序是端口64004,接收应用程序是1400) - 可能跨“域”问题?两人都是当地的主人。

  • 两者都在使用属于visual studio的测试网络服务器。

  • 我尝试将2个协议添加到web.config(add name =“HttpGet”add name =“HttpPost”)

  • 服务器上的事件查看器中出现错误。

  • 我在Firebug中得到以下内容......

    OPTIONS AirportSearchGeneric http://localhost:1400/services/airportservice.asmx/AirportSearchGeneric

    500内部服务器错误

    本地主机: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;
        }
    }

...不要认为这是一个问题,因为在调试时,这里没有代码被执行。

我非常确定我已经解读了为什么会出现这种情况的所有原因,所以对于我如何能够实现这一点的任何建议都会非常有用。

干杯。

作为参考,萤火虫标题如下:

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

(除了500错误之外,没有收到萤火虫的回复,根本没有回复。)

1 个答案:

答案 0 :(得分:1)

在同一台计算机上使用不同的端口被视为跨域,浏览器不允许您这样做。

您可以通过使用JSONP欺骗浏览器来调用另一个端口(如果可以将自己限制为仅使用GET请求)或将其中一个端口更改为与另一个端口相同。

Ajax Cross Domain Calls