2010-11-27 35 views
0

做了很多谷歌搜索,但似乎無法找到答案。JQuery使用ASP.Net Web服務的web服務器 - 請求格式無法識別的URL意外終止於

當我打電話給我的web服務從Jquery的,我收到錯誤

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

因素

  • 我目前調用Web服務是在同一臺機器(上,但在不同的網絡服務器調用應用程序是端口64004和接收應用程序是1400) - 可能跨越「域」的問題?都是本地主機。

  • 兩者都使用作爲Visual Studio一部分的測試Web服務器。

  • 我曾嘗試加入2個協議web.config中(添加名稱=「HTTPGET」加名=「HttpPost」)

  • 在事件查看器的錯誤occures在服務器上。

  • 我得到在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); 
        } 
       }); 

Web服務代碼...

[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錯誤接收的,沒有HTML響應的話)。

回答

1

在同一臺計算機上使用不同的端口被認爲是跨域,並且不被瀏覽器允許,因爲您懷疑。

您可以通過使用JSONP欺騙瀏覽器來調用其他端口(如果可以限制自己只使用GET請求)或將其中一個端口更改爲與其他端口相同。

Ajax Cross Domain Calls

相關問題