2011-10-08 54 views
0

我有一個單獨的HTTP服務器託管在另一個域,我用作我的後端服務器(C#)。它創建一個TcpListener,並在連接上創建一個新線程來處理連接。跨域GET請求不能在jQuery中使用C#後端服務器

我使用jQuery向此服務器發出ajax請求,而jQuery發送OPTIONS請求。經過一番調查後,我將這部分內容添加到了我的程序中,希望之後可以繼續使用HTTP請求。 (ns是的NetworkStream的一個實例,從TcpClient.GetStream())

if (req1.StartsWith("OPTIONS")) 
      { 
       //req1 = req1.Split('\n')[0].Substring(9); 
       string headers = string.Format(
        "HTTP/1.0 200 OK\r\n"+ 
       "Access-Control-Allow-Origin: *\r\n"+ 
       "Access-Control-Allow-Methods: *\r\n"+ 
       "Access-Control-Max-Age: 1728000\r\n"+ 
       "Access-Control-Allow-Headers: *\r\n"+ 
       "Connection: Keep-Alive\r\n"+ 
       "Content-Type: text/plain\r\n\r\n"); 
       ns.Write(Encoding.ASCII.GetBytes(headers), 0, Encoding.ASCII.GetBytes(headers).Length); 
       ns.Close(); client.Close(); return; 
      } 

不幸的是,瀏覽器會將發送選項請求到服務器,即使服務器發回訪問控制頭應該讓它有無限訪問。

以下是對這些請求的1網絡日誌:http://pastebin.com/T07Whvem

任何建議,以使這項工作? JavaScript代碼是相當瑣碎,但我會包括它:

//this is just a long-poll 
function waitForMsg(){ 

    $.ajax({ 
     url: "http://127.0.0.1:6969/2|||ub", 
     dataType: "text", 

     async: true, 
     cache: true, 
     timeout:50000, 

     success: function(data){ 
      addmsg("new", data); 
      setTimeout(
       'waitForMsg()', 
       1000 
      ); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      addmsg("error", textStatus + " (" + errorThrown + ")"); 
      setTimeout(
       'waitForMsg()', 
       "1000"); 
     }, 
    }); 
}; 

$(document).ready(function(){ 
    waitForMsg(); /* Start the inital request */ 
}); 

,因爲這不是一個真正的標準Web服務器,我不能使用現有的網絡服務器;只是一個可以通過http獲取指令的服務器。

謝謝!

+0

有一個適當的WCF服務爲您的後端將大大有助於解決你的問題很長的路要走。 – slugster

回答

0

您需要啓用以下設置在jQuery的

$(document).ready(function() 
{ 
    $.support.cors = true; 
}); 

見:http://api.jquery.com/jQuery.support/

+0

謝謝,這工作。這阻止了發生前的飛行,所以我在每個響應中都包含了與CORS相關的頭文件。不是最優化的,但對我所需要的很好。 –