2013-06-21 109 views
0

我正在使用WCF服務,並且當前它由Silverlight應用程序使用。 WCF服務具有clientaccesspolicy.xml和crossdomain.xml,這就是爲什麼從Silverlight發出請求沒有問題,即使請求來自不同的域。AJAX跨域請求WCF服務,而不使用jsonp

現在,我的理解是,在添加WCF服務的Web配置的代碼下面一行用.NET 4.0或以上的內置允許使用jsonp

<standardendpoint crossdomainscriptaccessenabled="true">

然而,爲了使跨域請求,JSONP不會解決我的問題,因爲我需要添加jsonp不允許的自定義請求標頭,因爲它不是真正製作XMLHttpRequest。

我想知道,如果我編輯WCF服務global.asax與下面的代碼片段,我將能夠成功地使AJAX跨域請求?

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    EnableCrossDomainAjaxCall(); 
} 

private void EnableCrossDomainAjaxCall() 
{ 
    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(); 
    } 
} 

請注意,我有問題部署WCF項目,所以我只想知道我採取正確的做法。

+0

我已經解決了這個問題。 – premsh

回答

2
protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    EnableCrossDomainAjaxCall(); 
} 

private void EnableCrossDomainAjaxCall() 
{ 
    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, Foo"); 
    HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
    HttpContext.Current.Response.End(); 
} 

}

的伎倆。

在我的情況下,我還必須添加一個名爲Foo的自定義標題作爲示例,因爲我必須從客戶端傳遞該標題。

希望它可以幫助別人!