如何为自托管 WCF 服务启用跨域调用
Posted
技术标签:
【中文标题】如何为自托管 WCF 服务启用跨域调用【英文标题】:How to enable cross domain calls for self hosted WCF service 【发布时间】:2013-10-06 10:04:30 【问题描述】:我创建了一个在 Windows 机器上运行的自托管 WCF 服务。现在我想使用 AJAX 调用来使用服务的操作。在 iExplorer、Firefox 和 Chrome 中,我都没有得到预期的 JSON 流。
我必须向自托管服务添加什么才能允许跨域调用?
问候 西蒙
【问题讨论】:
你使用什么绑定? WCF 服务如何托管(进程?IIS?) webHttpBinding,它在 windows 中作为服务托管,使用 ServiceBase.Run(new ioNotificationService()); 【参考方案1】:http://pranayamr.blogspot.se/2011/06/calling-cross-domain-wcf-service-using.html 似乎是一篇有效的文章。您需要相应地配置您的服务。这在过去对我有用。
【讨论】:
那篇文章建议添加 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]。在 ASP 中,我假设这篇文章是指 Web 托管服务。我的问题涉及自托管服务。 有人知道自托管服务的解决方案吗?【参考方案2】:您必须添加额外的方法来公开跨域策略,
http://blogs.msdn.com/b/carlosfigueira/archive/2008/03/07/enabling-cross-domain-calls-for-silverlight-apps-on-self-hosted-web-services.aspx
【讨论】:
【参考方案3】:对于托管在 localhost\Service.mvc 上的 Service GetPerson,请使用:
$.ajax(
type: 'GET', //GET or POST or PUT or DELETE verb
url: 'Service.svc/GetPerson', // Location of the service
data: userid, //Data sent to server
contentType: 'application/json; charset=utf-8', // content type sent to server
dataType: 'json', //Expected data format from server
processdata: true, //True or False
success: function (data) //On Successfull service call
alert(data.Name);
,
error: function (msg) // When Service call fails
alert(msg);
);
链接:http://www.cleancode.co.nz/blog/1041/complete-example-wcf-ajax-ssl-http
【讨论】:
但这是否回答了有关跨域调用的问题?我不这么认为。如果此 JQuery 代码托管在与服务不同的域上,则此代码将失败,或者换句话说,您的浏览器将执行 ajax 请求但不会接收任何数据。那是我的问题。 你能从客户端电脑ping到服务器电脑吗?您可以解析名称(通常通过 ping以上是关于如何为自托管 WCF 服务启用跨域调用的主要内容,如果未能解决你的问题,请参考以下文章
启用从 jQuery ajax 到不在 IIS 中托管的 WCF 服务的 CORS POST
是否可以在 IE 中进行从 https 到 http 的跨域请求?