[英]WCF javascript call cross domain
我是 javascript 的新手,我遇到了一個讓我很難過的問題。
我想在一個頁面中添加一個跟蹤 javascript。 該腳本將調用 wcf 服務來跟蹤客戶端瀏覽器信息、訪問的頁面和時間戳。 問題是我在 javascript 調用上得到:“405 Method Not Allowed”錯誤。 該服務將在另一個域上。 現在我在 localhost 上測試它。 該服務運行良好,因為我可以從瀏覽器的新頁面調用它。 你遇到過同樣的問題嗎? 我怎樣才能解決這個問題?
我的 javascript 代碼是:
Wcf 服務代碼:
[ServiceContract(Name = "CustomersAssistantService", Namespace = "CustomersAssistantService")]
public interface ICustomersAssistantService
{
[OperationContract]
[WebGet]
string DoWork();
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string Sum(int n1, int n2);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CustomersAssistantService : ICustomersAssistantService
{
public string DoWork()
{
return "work done";
}
public string Sum(int n1, int n2)
{
return (n1 + n2).ToString();
}
}
Javascript 調用:
function CallWcf1(){
var _I = this;
var url = "http://localhost:58399/CustomersAssistantService.svc/customersAssistantService/";
var methodUrl = _I.serviceUrl + 'dowork';
$.ajax( {
url: methodUrl,
data: '',
type: "GET",
processData: false,
contentType: "application/json",
timeout: 10000,
dataType: "text", // not "json" we'll parse
success:
function(res)
{
if (!callback) return;
// *** Use json library so we can fix up MS AJAX dates
var result = JSON2.parse(res);
// *** Bare message IS result
if (bare)
{ callback(result); return; }
// *** Wrapped message contains top level object node
// *** strip it off
for(var property in result)
{
callback( result[property] );
break;
}
},
error:
function(xhr)
{
if (!error) return;
if (xhr.responseText)
{
var err = JSON2.parse(xhr.responseText);
if (err)
error(err);
else
error( { Message: "Unknown server error." })
}
return;
}
});
}
難道我做錯了什么?
非常感謝, 拉杜 D
您遇到了 Same Origin Policy 。 Ajax 請求僅限於與同源通信; 跨域請求通常會被拒絕。
根據您的需要,有多種方法:
據我所知,對 WCF 的請求必須使用 POST 方法,所以改為:
type: "POST",
在 AJAX 調用中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.