通过 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();
您必须添加对以下程序集的引用:
希望这可以帮助。
资料来源: