开发者

JQuery consuming ASP.Net Web Service webserver - Request format is unrecognized for URL unexpectedly ending in

Done a lot of Googling on this but cant seem to find an answer.

When I call my web service from Jquery I am receiving the error

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

Factors

  • I am currently calling a webservice that is on the same machine but on a different webserver (calling app is port 64004 and receiving app is 1400) - possible cross "domain" issue? Both are local host.

  • Both are using the test web server that is part of visual studio.

  • I have tried adding the 2 protocols to the web.config (add name="HttpGet" add name="HttpPost")

  • The error occures in the Event Viewer on the server.

  • I get the following in Firebug...

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

    500 Internal Server Error

    localhost:1400

... not seen OPTIONS before but the request is being accesse开发者_如何学编程d with a POST request.

JQuery code...

$.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);
                    }
                });

Web service code...

[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;
        }
    }

... dont think its a problem in here as when debugging, no code in here gets executed.

Pretty sure I have covered off all of the reasons I have read as to why this occurs so would be greatful for any advice on how I can get this working.

Cheers.

For reference the firebug headers are as follows:

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

(No response is received in firebug apart from the 500 error, there is no html response at all).


Using different ports on the same machine is considered cross domain and not allowed by the browser as you were suspecting.

You either call the other port by tricking the browser using JSONP (if can limit yourself to only using GET requests) or change one of the ports to be the same as the other.

Ajax Cross Domain Calls

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜