連接到通過AJAX一個WCF RESTful服務,當我有這個問題需要
我的JavaScript是這樣的:
var GetData= function(){
var data;
$.ajax({
url: this.server + "/data",
async: false,
type: "GET",
success: function (success) {
data = success;
}
});
return data;
};
我的服務端點與此代碼打開
ServiceHost host = new ServiceHost(new MyService());
host.Open();
所有重要的數據存儲在App.config文件中,我不必爲該修補程序更改該文件。
我知道我必須在發送響應消息之前的某個地方添加標頭。
經過一番搜索和黑客入侵後,我發現了ServiceHost對象的Authorization屬性。 Authorization屬性是ServiceAuthorizationBehavior類的一個實例,其對象具有一個名爲ServiceAuthorizationManager的屬性,該屬性是ServiceAuthorizationManager類的一個實例。
通過創建一個從ServiceAuthorizationManager繼承並將其設置爲ServiceHost實例的授權行爲的ServiceAuthorizationManager屬性的新類,您可以攔截對您的服務的所有調用。
這是怎麼了我已經實現了我的課
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
HttpResponseMessageProperty prop = new HttpResponseMessageProperty();
prop.Headers.Add("Access-Control-Allow-Origin", "*");
operationContext.OutgoingMessageProperties.Add(HttpResponseMessageProperty.Name, prop);
return true;
}
}
那麼之後我宣佈我的ServiceHost對象(被打開主機前)我加入這一行
host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();
這樣做了以後,重建,並運行我的服務錯誤消息停止顯示。萬歲!
最後,我讀了一篇描述ServiceHost類是爲SOAP/WSDL服務而非RESTful服務設計的文章。對於RESTful服務,應該使用WebServiceHost對象。
所以
ServiceHost host = new ServiceHost(new MyService());
host.Open();
成爲
WebServiceHost host = new WebServiceHost(new MyService());
host.Open();
您必須添加引用以下組件:
希望這可以幫助。
來源:
您好,感謝您的回覆。我在我的問題中添加了更多信息。我無法將此標題添加到我的回覆中。在執行請求的方法之前引發此錯誤。 – aumanets 2011-06-10 16:49:12