2013-04-10 67 views
0

我有一個硬性的Microsoft Visual Studio 2008,我想從您的Web服務跨域查詢到WCF服務,但它不起作用。對WCF的跨域AJAX請求

網頁上

Ajax代碼:

$.ajax (
    url: "http:/сите.com/ApplicationController.svc/HelloPost/" 
    type: "POST", 
    dataType: "json", 
    contentType: "application/json", 
    success: function (data) { 
     alert (data); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     alert (jqXHR textStatus errorThrown);<br/> 
    } 
}); 

但我的WCF服務:

[OperationContract] 
[WebInvoke (Method = "POST", UriTemplate = "HelloPost /", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] 
[JSONPBehavior (callback = "callback")] 
String GetPostHello (Stream data); 

public String GetPostHello (Stream data) 
{ 
    HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Origin", "*"); 

    if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
    { 
     HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST"); 
     HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Headers", "Content-Type, Accept"); 
     HttpContext.Current.Response.AddHeader ("Access-Control-Max-Age", "1728000"); 
     HttpContext.Current.Response.End(); 
     return null; 
    } 
    return "Hello"; 
} 

當它工作的域中的GET請求,但儘量做到POST請求返回這個頭:

Content-Type application/json Accept application/json, text/javascript, */*;q=0.01

幫助,可能是什麼問題!謝謝!

回答

1

POST請求被支持CORS(這是你使用與訪問控制頭什麼的)瀏覽器,請求之前,瀏覽器首先發送一個預檢要求進行跨域,這是一個HTTP OPTIONS請求,詢問服務器是否可以向其發送POST請求。您可以添加另一個對OPTIONS請求作出響應的操作,也可以對WCF實施完整的CORS支持 - 這不是太簡單,但我已在http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx上寫過關於它的操作步驟。

+0

不幸的是,您的示例未在Microsoft Visual Studio 2008中運行。 消息: 所選文件是解決方案文件,但由此應用程序的較新版本創建,無法打開。 是否有可能在Microsoft Visual Studio 2008中創建這樣的應用程序? – 2013-04-10 07:30:28

+0

您應該可以在VS2008中創建一個新的解決方案,並使用與我擁有的項目相同的項目,然後像原始項目中那樣添加這些文件。 – carlosfigueira 2013-04-10 16:14:04